为什么在unity中我得到警告:你正在尝试使用'new'关键字

本文关键字:new 关键字 unity 为什么 警告 | 更新日期: 2023-09-27 18:18:10

完整的警告信息:

您正在尝试使用new关键字创建MonoBehaviour。这是不允许的。MonoBehaviours只能用AddComponent()加入。或者,您的脚本可以从ScriptableObject继承,或者根本没有基类

在两个脚本中,我没有使用new关键字:

DetectPlayer脚本:
public class DetectPlayer : MonoBehaviour 
{
    private int counter = 0;
    private void OnGUI()
    {
        GUI.Box(new Rect(300, 300, 200, 20),
            "Times lift moved up and down " + counter);
    }
}
Lift脚本:
public class Lift : MonoBehaviour 
{
    private bool pressedButton = false;
    private DetectPlayer dp = new DetectPlayer();
    private void OnGUI()
    {
        if (pressedButton)
            GUI.Box(new Rect(300, 300, 200, 20), "Press to use lift!");
    }
}

为什么在unity中我得到警告:你正在尝试使用'new'关键字

最好不要将monobehaviour视为传统意义上的c#对象。它们应该被视为自己独特的东西。它们在技术上是Unity所基于的实体组件系统架构的"组件"部分。

因此,单一行为作为一个组件,它不可能不存在于游戏对象上。因此,仅使用"new"关键字创建MonoBehaviour是行不通的。要创建MonoBehaviour,你必须在GameObject上使用AddComponent。

除此之外,你不能在类范围内创建新的GameObject。这必须在游戏运行后通过某种方法完成,而在Awake中便是最理想的地方。

你要做的是

DetectPlayer dp;
private void Awake()
{
    GameObject gameObject = new GameObject("DetectPlayer");
    dp = gameObject.AddComponent<DetectPlayer>();
}