从统一的数组中实例化

时间:2015-11-22 12:07:49

标签: c# arrays random unity3d instantiation

我试图实例化一个我存储在数组中的随机小行星游戏对象。但是我收到了这个错误,无法解决问题。任何人都可以提供帮助:

  

Assets / Scripts / GameController.cs(7,49):错误CS0236:字段初始化程序无法引用非静态字段,方法或属性`GameController.asteroids'

RuntimeException

编辑:

我一直在玩这个,这就是我到目前为止所做的:

using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {

    int asteroids = 2;     
    GameObject[] Asteroids = new GameObject[asteroids];

    public Vector3 spawnValues;
    public int asteroidCount;
    public float spawnWait;
    public float startWait;
    public float waveWait;

    void Start () {

        //call asteroid array variables
        Asteroids [0] = gameObject.tag == "Asteroid01";
        Asteroids [1] = gameObject.tag == "Asteroid02";

        StartCoroutine (spawnWaves ());
    }

    IEnumerator spawnWaves () {

        yield return new WaitForSeconds (startWait);

        while (true) {
            for (int i = 0; i < asteroidCount; i++) {
                Vector3 spawnPosition = new Vector3 (spawnValues.x, Random.Range (-spawnValues.y, spawnValues.y), spawnValues.z);
                Quaternion spawnRotation = Quaternion.identity;

                Instantiate (Random.Range(0,1), spawnPosition, spawnRotation);
                yield return new WaitForSeconds (spawnWait);
            }
        }
    }

3 个答案:

答案 0 :(得分:3)

这不是实例化游戏对象的正确方法。相反,试试这个:

Instantiate (Asteroids[i], spawnPosition, spawnRotation);

错误是第一个参数是游戏对象,但在代码中传递浮点值。同时将new GameObject[asteroids]代码移到构造函数内部或Start()方法中,或尝试使用常量/静态int值。

答案 1 :(得分:0)

您不能使用一个实例变量来初始化另一个实例变量,因为编译器无法保证初始化的顺序。

您可以在构造函数中执行此操作:

public class GameController : MonoBehaviour {

    int asteroids;     
    GameObject[] Asteroids;

    public GameController()
    {
        asteroids = 2;
        Asteroids = new GameObject[asteroids]
    }
...

或者正如cubrr在评论中所说,小行星可以是一个常数。

答案 2 :(得分:0)

您不能以这种方式使用普通变量初始化数组。 要么你可以做

const int asteroids = 2;     
GameObject[] Asteroids = new GameObject[asteroids];

int asteroids = 2;     
GameObject[] Asteroids;

void Start()
{
 Asteroids = new GameObject[asteroids];
}