如何在Unity3D中调用和销毁对象(5.1)

时间:2015-06-18 14:02:08

标签: c# unity3d 3d

我试图用与十字路口类似的游戏玩法制作游戏,比如无限级别生成/敌人生成。在我的代码中,一切似乎与地面和敌人的生成一起工作,并且它在我玩的时候起作用。但我不能让新生的敌人重复自己。我试图将" Invoke重复功能" in void Start,void Update和for循环内部。但它不起作用。它只发出一个敌人。

然后我有问题引用/找到新创建的对象(平面/敌人),这样我就可以在它们不在屏幕时将其销毁。

我必须以错误的方式构建代码,但我无法弄清楚。

    public class levelGenerationScrip : MonoBehaviour {

public GameObject greenPlane;
public GameObject bluePlane;
public GameObject brownPlane;
public GameObject testEnemy;

int firstRand;
int secondRand;
int distPlayer = 12 ;
int enemyDist= 7;

Vector3 intPos = new Vector3 (0,0,0);
Vector3 enemyPos = new Vector3 (0,0,0);
Vector3 enemyPos2 = new Vector3 (0,0,0);

void Start () {

}

void Update () {

    if (Input.GetKeyDown("w"))
    {
        firstRand = Random.Range(1,4);
        if(firstRand == 1)
        {
            secondRand = Random.Range(1,1);
            for(int i = 0; i < secondRand; i++)
            {
                intPos = new Vector3(-2.3f,0.5f,distPlayer);
                enemyPos = new Vector3 (7,1.51f,enemyDist);

                distPlayer += 1 ;
                enemyDist += 1;

                GameObject greenIns = Instantiate(greenPlane) as GameObject;
                greenIns.transform.position = intPos ;

                GameObject testEn = Instantiate (testEnemy) as GameObject;
                testEn.transform.position = enemyPos ;
                testEn.GetComponent<Rigidbody> ().AddForce(new Vector3 (-350, 0, 0));
                //InvokeRepeating ("testEn",1,1.5f);
            }

        }
        if(firstRand == 2)
        {
            secondRand = Random.Range(1,1);
            for(int i = 0; i < secondRand; i++)
            {
                intPos = new Vector3(-2.3f,0.5f,distPlayer);
                enemyPos2 = new Vector3 (-11,1.51f,enemyDist);
                distPlayer += 1 ;
                enemyDist += 1;

                GameObject blueIns = Instantiate(bluePlane) as GameObject;
                blueIns.transform.position = intPos ;

                GameObject testEn = Instantiate (testEnemy) as GameObject;
                testEn.transform.position = enemyPos2 ;
                testEn.GetComponent<Rigidbody> ().AddForce(new Vector3 (+350, 0, 0));
            }
        }
        if(firstRand == 3)
        {
            secondRand = Random.Range(1,1);
            for(int i = 0; i < secondRand; i++)
            {
                intPos = new Vector3(-2.3f,0.5f,distPlayer);
                enemyPos = new Vector3 (7,1.51f,enemyDist);

                distPlayer += 1 ;
                enemyDist += 1;


                GameObject brownIns = Instantiate(brownPlane) as GameObject;
                brownIns.transform.position = intPos ;

                GameObject testEn = Instantiate (testEnemy) as GameObject;
                testEn.transform.position = enemyPos2 ;
                testEn.GetComponent<Rigidbody> ().AddForce(new Vector3 (+400, 0, 0));
            }
        }

    }

}

}

1 个答案:

答案 0 :(得分:0)

通过&#34; Unity&#34;在你的标签中我认为你打算放置&#34; Unity3d&#34;

实例化游戏对象后,将它们推送到全局列表变量中,现在您可以随时引用它们。

// global var
List<GameObject> objs = new List<GameObject>();

// inside function
GameObject blueIns = Instantiate(bluePlane) as GameObject;
objs.Add(blueIns);

GameObject testEn = Instantiate (testEnemy) as GameObject;
objs.Add(testEn);

至于你的InvokeRepeating问题,你还没有发布你的用法,所以我不能告诉你你做错了什么。