Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中,如果发现组件处于if状态,请立即使用它_C#_Unity3d - Fatal编程技术网

C# 在Unity中,如果发现组件处于if状态,请立即使用它

C# 在Unity中,如果发现组件处于if状态,请立即使用它,c#,unity3d,C#,Unity3d,我见过一个简写,如果在if条件下发现组件,请使用它 所以不是这个 SomeScript script = gameObject.GetComponent<SomeScript>(); if (script != null) { script.DoSomething(); } 我见过这样的速记 if (SomeScript script = gameObject.GetComponent<SomeScript>()) { script.DoSomething()

我见过一个简写,如果在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相比,显著的区别在于,当请求的组件不存在时,此方法不会在编辑器中分配

使用UnityEngine; 公共类TryGetComponent示例:MonoBehavior { 无效启动 { 如果尝试将部件拉出铰链连接铰链 { 铰链。使用弹簧=假; } } } 或者用你的例子

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

如果使用TryGetComponent找到组件,则对找到的组件的引用将存储在中,然后可以在If块内使用


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

您很可能正在查找最近添加的组件,我认为从2019.2开始,直到TryGetComponent

从:

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

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

使用UnityEngine; 公共类TryGetComponent示例:MonoBehavior { 无效启动 { 如果尝试将部件拉出铰链连接铰链 { 铰链。使用弹簧=假; } } } 或者用你的例子

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

如果使用TryGetComponent找到组件,则对找到的组件的引用将存储在中,然后可以在If块内使用

如果没有找到匹配的组件,它将转到else部分。

一行程序

gameObject.GetComponent<SomeScript>()?.DoSomething();
一行

gameObject.GetComponent<SomeScript>()?.DoSomething();

如果要多次运行该方法,最好在两次调用中执行,首先将其缓存在awake中

 private someScript script;
 void Awake()
 {
     someScript = GetComponent<SomeScript>();
 }
强烈建议您使用RequireComponent属性对脚本进行注释:

[RequireComponent(typeof(SomeScript))]
public class MyScriptThatRequiresSomeScript : MonoBehaviour

然后,当您将脚本添加到游戏对象时,会自动添加该组件。如果您想多次运行该方法,最好在两次调用中完成,首先将其缓存在awake中

 private someScript script;
 void Awake()
 {
     someScript = GetComponent<SomeScript>();
 }
强烈建议您使用RequireComponent属性对脚本进行注释:

[RequireComponent(typeof(SomeScript))]
public class MyScriptThatRequiresSomeScript : MonoBehaviour

然后,当您将脚本添加到游戏对象时,该组件将自动添加

我不知道存在此组件,我很高兴随机单击此问题,非常感谢!我不知道这个问题的存在,我很高兴我随机点击了这个问题,非常感谢!回答得好!这个答案只供一次使用,但我相信其他人会发现这个有用的答案!这个答案只供一次使用,但我相信其他人会发现它很有用如果你只计划对它调用一次函数,那么它肯定会非常有效,但是请记住,如果你想对组件执行多个操作,你必须在每次想与它交互时执行检查,由于您不/不能使用此引用组件。如果您只计划对组件调用一次函数,则此操作肯定会非常有效,但是请记住,如果您想对组件执行多个操作,则每次希望与组件交互时都必须执行检查,因为您不/不能使用此引用来引用组件。