为了获得另一个类中的变量,函数,我已经知道了两种方法。首先,将Get Component添加到我们想要获取变量(s),函数的脚本中。其次,是使用脚本本身。
所以我做了以下代码:
第一种情况:在脚本中获取组件
public class Manager : MonoBehaviour
{
private AnotherManager _anotherManager;
private void Awake()
{
_anotherManager = GameObject.Find("Managers").GetComponent<AnotherManager>();
}
private void Start()
{
_anotherManager.myIntVariable = 10;
_anotherManager.MyFunction();
}
}
public class AnotherManager : MonoBehaviour
{
public int myIntVariable;
public void MyFunction()
{
}
}
第二种情况:使用脚本本身的实例
public class Manager : MonoBehaviour
{
private void Start()
{
AnotherManager.instance.myIntVariable = 10;
AnotherManager.instance.MyFunction();
}
}
public class AnotherManager : MonoBehaviour
{
public static AnotherManager instance;
public int myIntVariable;
private void Awake()
{
instance = this;
}
public void MyFunction()
{
}
}
我的问题是:这些案件之间有什么区别吗?在编程程序员或性能的良好实践方面,或者只是程序员的观点或其他问题?
由于
答案 0 :(得分:2)
第二个例子是所谓的Singleton Pattern,应该非常谨慎地使用。
我尝试永远不要使用第一种方法,无论你在哪里找到游戏对象并希望它存在。
您可以为Unity Inspector公开一个字段,以便您可以将其连线,就像暴露任何其他变量一样
public AnotherManager AnotherManager;
或者,如果你讨厌在像我这样的地方使用公共,你也可以向Unity表明你希望在检查器中使用SerializeField属性公开这个变量
[SerializeField]
private AnotherManager anotherManager;
使用这两种方法,您可以将一个附加了AnotherManager组件的对象拖到检查器的字段中。
如果实例化对象需要访问它,则需要在实例化时将其连接起来。
如果你需要帮助将它整合在一起,我可以附上一些截图。