首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我为什么要使用TryGetComponent而不是GetComponent?

我为什么要使用TryGetComponent而不是GetComponent?
EN

Stack Overflow用户
提问于 2022-02-12 18:23:05
回答 1查看 1.8K关注 0票数 2

我最近发现了TryGetComponent,并对它做了一些研究。我发现了主要的区别是,当请求的组件不存在时,TryGetComponent“不会在编辑器中分配”。我真的不知道这意味着什么,因为我对团结还是陌生的,为什么有人会请求根本不存在的组件,那么有人能解释我是否应该停止使用GetComponent,如果应该的话,为什么呢?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-02-12 19:41:31

使用GetComponent可能有一些原因,而不确定是否存在此组件。在这种情况下,有必要检查组件是否实际存在。例如,您有一个游戏对象数组(在本例中,它是RaycastHit2D数组,是从Physics2D.GetRayIntersectionAll方法获得的)。您需要从每个包含特定组件的游戏对象中调用特定的方法。您可以使用GetComponent并检查它是否等于null。

代码语言:javascript
复制
RaycastHit2D[] ray = Physics2D.GetRayIntersectionAll(_mainCamera.ScreenPointToRay(Input.mousePosition));
        foreach (RaycastHit2D item in ray)
        {
            var myClass = item.transform.GetComponent<MyClass>();
            if (myClass != null )
            {
                myClass.MyMethod();
            }
        }

或者您可以使用TryGetComponent.在这种情况下,您不需要多次使用GetComponent或创建附加变量。代码看起来更干净。

代码语言:javascript
复制
RaycastHit2D[] ray = Physics2D.GetRayIntersectionAll(_mainCamera.ScreenPointToRay(Input.mousePosition));
        foreach (RaycastHit2D item in ray)
        {
            
            if (item.transform.TryGetComponent(out MyClass myClass))
            {
                myClass.MyMethod();
            }
        }

在某些特殊情况下,TryGetComponent似乎更有用,但并不总是如此。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71094659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档