我见过 "如果在IF条件中发现了一个组件,就用它 "的速记。
如此一来
SomeScript script = gameObject.GetComponent<SomeScript>();
if (script != null) {
script.DoSomething();
}
我看到了某种速记,像这样的。
if (SomeScript script = gameObject.GetComponent<SomeScript>()) {
script.DoSomething();
}
有谁知道我说的是什么意思?对不起,我不懂专业术语
你很可能正在寻找(最近添加的,我想从2019.2及以上版本开始)。TryGetComponent
.
来自 统一文件:
获取指定类型的组件(如果存在)。
TryGetComponent将尝试检索指定类型的组件。与GameObject.GetComponent相比,显著的区别在于当请求的组件不存在时,该方法不会在编辑器中进行分配。
using UnityEngine;
public class TryGetComponentExample : MonoBehaviour
{
void Start()
{
if (TryGetComponent(out HingeJoint hinge))
{
hinge.useSpring = false;
}
}
}
或者使用你的例子
if (TryGetComponent(out SomeScript script))
{
script.DoSomething();
}
如果使用 TryGetComponent
找到的组件的引用将被存储在 out
参数,然后你可以在 if
块。
如果没有找到匹配的组件,就会转到 else
节。
该节。真正 一句话...
gameObject.GetComponent<SomeScript>()?.DoSomething();
如果你想多次运行该方法,那么最好分两次调用,先在awake中缓存一下
private someScript script;
void Awake()
{
someScript = GetComponent<SomeScript>();
}
然后当你在例如Update.NET中使用它的时候,你就会发现它是一个很好的例子。
void Update()
{
if(someScript)
{
// Do something with someScript
}
// or:
someScript?.DoSomething();
}
强烈建议你用 RequireComponent 属性来注释你的脚本。
[RequireComponent(typeof(SomeScript))]
public class MyScriptThatRequiresSomeScript : MonoBehaviour
这样当你把脚本添加到游戏对象中时,这个组件就会自动被添加进来。