在C#中声明一个类的新实例

时间:2014-03-07 05:01:13

标签: c# reference unity3d

Unity不喜欢这个,也不喜欢研究和团结的警告

(“您正在尝试使用'new'关键字创建MonoBehavior。这是不允许的.MonoBehaviours只能使用AddComponent()添加。或者您的脚本可以继承ScriptableObject或根本没有基类。)< / p>

我知道AddComponent,但我不认为这就是我想要的。

public Boids boids = new Boids();

Boids是我的第二堂课。我在一个教程上看到了这个工作,所以我很困惑为什么这在Monodevelop中不起作用。

2 个答案:

答案 0 :(得分:1)

很容易谷歌......

http://forum.unity3d.com/threads/119537-You-are-trying-to-create-a-MonoBehaviour-using-the-new-keyword

这与Boids继承的内容有关。新的显然不是实例化对象的正确方法,它应该使用统一框架

进行实例化
gameObject.AddComponent<Boids>()

答案 1 :(得分:0)

如果我理解正确,你需要你的AI脚本来获取场景中的所有Boid实例并对它们做些什么。

如果是这种情况,那么有多种方法可以做到这一点,一种简单的方法是:

  1. 在AI脚本中声明了public Boids[] boids字段
  2. 创建单个游戏对象并添加AI脚本
  3. 创建一堆游戏对象,并在Unity编辑器中将Boids脚本添加到它们
  4. 选择包含AI脚本的游戏对象。您应该在检查器中看到boids字段。将所有Boid游戏对象拖放到该字段
  5. 您现在可以访问AI脚本中的所有链接的Boid
  6. 以下是一些示例脚本:

    public class AI : MonoBehaviour
    {
        public Boid[] boids;
    
        void Update()
        {
            foreach (Boid boid in this.boids)
            {
                // Do something with boid
            }
        }
    }
    
    public class Boid : MonoBehaviour
    {
        public float searchRadius;
        // Anything else
    }