如何实例化包含GameObject的对象类

本文关键字:对象 GameObject 包含 实例化 | 更新日期: 2023-09-27 18:25:40

我正试图在Unity中使用C#脚本实例化大量"粒子"。我已经创建了一个粒子类,其中包含相应的GameObject的创建。每个粒子实例中的GameObject都是一个球体。当尝试实例化一个新粒子(粒子p=新粒子(…))时,我收到Unity警告,不应使用"new"关键字。

"您正试图使用'new'关键字创建MonoBehavior。这是不允许的。MonoBehabiours只能使用AddComponent()添加。或者,您的脚本可以从ScriptableObject继承,或者根本没有基类UnityEngine.MonoBehavior:.ctor()"

实例化粒子类的多个实例(每个实例都包含一个奇异球体GameObject)的正确方法是什么?

粒子类别:

public class Particle : MonoBehaviour {
    Vector3 position = new Vector3();
    Vector3 velocity = new Vector3();
    Vector3 force = new Vector3();
    Vector3 gravity = new Vector3(0,-9.81f,0);
    int age;
    int maxAge;
    int mass;
    GameObject gameObj = new GameObject();
    public Particle(Vector3 position, Vector3 velocity)
    {
        this.position = position;
        this.velocity = velocity;
        this.force = Vector3.zero;
        age = 0;
        maxAge = 250;
    }
    // Use this for initialization
    void Start () {
        gameObj = GameObject.CreatePrimitive (PrimitiveType.Sphere);
        //gameObj.transform.localScale (1, 1, 1);
        gameObj.transform.position = position;
    }
    // FixedUopdate is called at a fixed rate - 50fps
    void FixedUpdate () {
    }
    // Update is called once per frame
    public void Update () {
        velocity += gravity * Time.deltaTime;
        //transform.position += velocity * Time.deltaTime;
        gameObj.transform.position = velocity * Time.deltaTime;
        Debug.Log ("Velocity: " + velocity);
        //this.position = this.position + (this.velocity * Time.deltaTime);
        //gameObj.transform.position
    }
}

CustomParticleSystem类:

public class CustomParticleSystem : MonoBehaviour {
    Vector3 initPos = new Vector3(0, 15, 0);
    Vector3 initVel = Vector3.zero;
    private Particle p;
    ArrayList Particles = new ArrayList();
    // Use this for initialization
    void Start () {
        Particle p = new Particle (initPos, initVel);
        Particles.Add (p);
    }
    // Update is called once per frame
    void Update () {
    }
}

非常感谢您的帮助!

如何实例化包含GameObject的对象类

您的代码看起来不错,只是您可能意外地为gameObj 键入了错误的声明

Particle类中将GameObject gameObj = new GameObject();更改为仅GameObject gameObj = null;

该错误特别提到您无法执行您所做的操作,并且在Start()中,您将其设置为如前所述。

编辑:看看Particle,它继承了MonoBehaviour。您需要让gameObject使用gameObject.AddComponent<Particle>(); 为您创建实例

http://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html

gameObject是在MonoBehaviour上定义的,所以您应该已经可以访问它了。