将组件获取到脚本与脚本本身的实例
Get Component to the Script vs Instance of the Script itself
为了在另一个 class 中获取变量、函数,我知道有两种方法可以做到这一点。首先,是将 Get Component 用于我们想要获取变量、函数的脚本。其次,是使用脚本本身的实例。
所以我做了如下代码:
第一种情况:将组件获取到脚本本身
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()
{
}
}
我的问题是:这些案例之间有什么区别吗?就程序员编码的良好实践或性能而言,还是只是程序员的观点或其他任何问题?
谢谢
第二个例子是所谓的 Singleton Pattern,应该非常谨慎地使用。
我尽量不使用第一种方法,无论是在您找到游戏对象并希望它存在的地方。
您可以为 Unity Inspector 公开一个字段,以便您可以像公开任何其他变量一样连接它
public AnotherManager AnotherManager;
或者,如果你像我一样讨厌到处使用 public,你也可以向 Unity 表明你希望使用 SerializeField 属性在检查器中公开这个变量
[SerializeField]
private AnotherManager anotherManager;
使用这两种方法,您可以将附加了 AnotherManager 组件的对象拖到检查器的字段中。
如果实例化对象需要访问它,您将需要在实例化时将其连接起来。
如果您需要帮助统一附加它,我可以附上一些屏幕截图。
为了在另一个 class 中获取变量、函数,我知道有两种方法可以做到这一点。首先,是将 Get Component 用于我们想要获取变量、函数的脚本。其次,是使用脚本本身的实例。
所以我做了如下代码:
第一种情况:将组件获取到脚本本身
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()
{
}
}
我的问题是:这些案例之间有什么区别吗?就程序员编码的良好实践或性能而言,还是只是程序员的观点或其他任何问题?
谢谢
第二个例子是所谓的 Singleton Pattern,应该非常谨慎地使用。
我尽量不使用第一种方法,无论是在您找到游戏对象并希望它存在的地方。
您可以为 Unity Inspector 公开一个字段,以便您可以像公开任何其他变量一样连接它
public AnotherManager AnotherManager;
或者,如果你像我一样讨厌到处使用 public,你也可以向 Unity 表明你希望使用 SerializeField 属性在检查器中公开这个变量
[SerializeField]
private AnotherManager anotherManager;
使用这两种方法,您可以将附加了 AnotherManager 组件的对象拖到检查器的字段中。
如果实例化对象需要访问它,您将需要在实例化时将其连接起来。
如果您需要帮助统一附加它,我可以附上一些屏幕截图。