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

C# 在C中声明类的新实例,c#,reference,unity3d,C#,Reference,Unity3d,Unity不喜欢这样,经过研究和Unity的警告 您正在尝试使用“new”关键字创建单行为。这是不允许的。只能使用AddComponent添加单行为。或者,您的脚本可以从ScriptableObject继承,也可以根本不继承基类 我知道AddComponent,但我觉得这不是我想要的 public Boids boids = new Boids(); 博伊兹是我的第二节课。我在一个教程中看到了这项工作,所以我有点困惑为什么这在Monodevelop中不起作用 用谷歌搜索很容易 这与Boids继

Unity不喜欢这样,经过研究和Unity的警告

您正在尝试使用“new”关键字创建单行为。这是不允许的。只能使用AddComponent添加单行为。或者,您的脚本可以从ScriptableObject继承,也可以根本不继承基类

我知道AddComponent,但我觉得这不是我想要的

public Boids boids = new Boids();

博伊兹是我的第二节课。我在一个教程中看到了这项工作,所以我有点困惑为什么这在Monodevelop中不起作用

用谷歌搜索很容易

这与Boids继承的东西有关。New显然不是实例化对象的正确方法,应该使用unity框架来初始化它

gameObject.AddComponent<Boids>()

如果我理解正确,您需要您的AI脚本来获取场景中的所有Boid实例,并对它们进行处理

如果是这种情况,那么有多种方法,一种简单的方法是:

在AI脚本中声明一个公共Boids[]Boids字段 创建单个游戏对象并添加AI脚本 创建一组游戏对象,并在Unity编辑器中将Boids脚本添加到其中 选择包含AI脚本的游戏对象。您应该在inspector中看到一个boids字段。将所有Boid游戏对象拖放到该字段 您现在可以访问AI脚本中所有链接的BOID 以下是一些示例脚本:

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
}

对,我用谷歌搜索了一下。但我需要它在我的globals中,因为我需要在我的另一个类中访问它。你不能在globals上这么做,这就是为什么我这么问的原因:谢谢。我想做的是设置我的公共BOID。。到我的globals中的Boids.cs脚本。我需要它在我的检查器中有一个下拉列表,其中包含我的Boids.cs类的所有全局变量。就像我在教程中发现的那样:如果你跳到35分钟左右,他在团结中,你明白我的意思。视频长度不到35分钟:。我想你会发现,你需要在全局变量中声明变量,并在游戏组件调用AddComponent时初始化该变量。我不确定你是否完全理解我的问题。AddComponent对我没有帮助。我需要在声明我的Boids类变量Boids时引用这个脚本。这将允许我在AI类中使用Boids类。我不能用AddComponent来做这件事,它只是简单地将脚本添加到我不想做的游戏对象中。我的问题是,在Unity中,新的等价物是什么。我听说过ScriptableObject,但它有点让人困惑。类Boids实际上使用了从MonoBehavior继承的任何方法或其他东西吗?为什么不直接从ScriptableObject继承呢?这样,它在inspector中仍然可以编辑。是的,我确实听说过ScriptableObject,但我对如何实现它感到非常困惑。我在谷歌上搜索了一下,但没有得到任何运气,你能帮我写一行例子吗?例如,这个例子对我没有什么帮助。我试图让我的Boids类从ScriptableObject继承,而不是从MonoBehavior继承。但我的督察运气不好。