示例:GameObject A附加有一个名为MakeItRain的脚本。该脚本中包含一个公共无效的Drizzle();
GameObject B也有一个脚本,想告诉MakeItRain做Drizzle();
在GameObject B的脚本中,我可以这样做:
public GameObject makeitrain;
然后我必须使用GetComponent到达Drizzle();在我的代码中。
在检查器中,将GameObject A放到makeitrain的插槽中,然后完成。
但是,我也可以在GameObject B的脚本中执行此操作:
public MakeItRain makeitrain;
然后仅在我的GameObject B脚本代码中调用
makeitrain.Drizzle();
,而无需GetComponent。在这两种情况下,我都必须在Inspector中将GameObject A拖放到GameObject B的插槽中。
为什么我绝对不应该做最后一个选择,有其他区别或原因吗?我知道第一种方法为我提供了更大的灵活性,因为我还可以调用GameObject A的其他组件,而不仅仅是脚本的东西。只是想知道是否还有其他理由不使用第二种方法。
最佳答案
答案取决于您是否需要调用任何函数或使用MakeItRain
脚本中的变量。
如果不需要在MakeItRain
脚本中调用任何函数或从中访问任何变量,则最好使用GameObject作为参考。另外,如果您需要做的是激活,去激活,旋转GameObject,然后将GameObject用作参考。
另一方面,如果需要能够从多个位置调用Drizzle
之类的函数或从MakeItRain
脚本访问变量,则需要使用MakeItRain
引用。目前,使用GameObject引用是没有意义的,因为通过使用它,每次需要调用函数或从附加到它的GetComponent
脚本中访问变量时,都必须使用MakeItRain
。
最后,当使用MakeItRain
脚本引用对象时,无需使用makeitrain.gameObject
就可以直接轻松地访问其所附的GameObject。这不需要使用GetComponent
函数。
只是想知道是否还有其他理由不这样做
第二种方法。
原因是由于必须使用GetComponent
函数而导致的性能问题。在Start
或Awake
函数中使用一次并初始化MakeItRain
变量会更好。
例如,这更好:
public MakeItRain makeitrain;
void Start()
{
makeitrain = GetComponent<MakeItRain>();
}
void Update()
{
makeitrain.Drizzle();
}
比这个:
public GameObject makeitrain;
void Update()
{
makeitrain.GetComponent<MakeItRain>().Drizzle();
}
并且应避免在每帧都必须在本机端搜索组件。
关于c# - 哪个更好:链接到GameObject或Unity中的类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53111289/