在 Unity 中,如果在 IF 条件下发现组件,则立即使用它

Ric*_*ill 2 c# unity-game-engine

我见过“如果在 IF 条件下找到组件,则使用它”的简写

所以而不是这个

SomeScript script = gameObject.GetComponent<SomeScript>();

if (script != null) {
  script.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

我看到过类似这样的速记

if (SomeScript script = gameObject.GetComponent<SomeScript>()) {
  script.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

有人知道我的意思吗?抱歉不懂术语

Rem*_*_rm 5

您很可能正在寻找(最近添加的,我认为从 2019.2 及更高版本开始)TryGetComponent

统一文档

获取指定类型的组件(如果存在)。

TryGetComponent 将尝试检索给定类型的组件。与 GameObject.GetComponent 相比的显着区别在于,当请求的组件不存在时,此方法不会在编辑器中分配。

using UnityEngine;

public class TryGetComponentExample : MonoBehaviour
{
    void Start()
    {
        if (TryGetComponent(out HingeJoint hinge))
        {
            hinge.useSpring = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者用你的例子

if (TryGetComponent(out SomeScript script)) 
{
  script.DoSomething();
}

Run Code Online (Sandbox Code Playgroud)

如果使用TryGetComponent对找到的组件的引用找到了组件,则将存储在out参数中,然后您可以在if块内使用该参数

如果未找到匹配的组件,则转到该else部分。

  • 我不知道这个存在,很高兴我随机点击了这个问题,非常感谢! (2认同)