C# 如何调用Unity3D中的重复和销毁对象(5.1)

C# 如何调用Unity3D中的重复和销毁对象(5.1),c#,unity3d,3d,C#,Unity3d,3d,我正在尝试制作一款与crossyroads类似的游戏,比如无限级生成/敌人生成。在我的代码中,地面和敌人这一代似乎一切都很好,而且在我玩的时候也很有效。但是我不能让新产生的敌人重复他们自己。我尝试将“调用重复函数”放在voidstart、voidupdate和for循环中。但它不起作用。它只发出一个敌人 然后我就无法找到新创建的对象(飞机/敌人),这样我就可以在它们离开屏幕时摧毁它们 我一定是用错误的方式构造了代码,但我想不出来 public class levelGenerationS

我正在尝试制作一款与crossyroads类似的游戏,比如无限级生成/敌人生成。在我的代码中,地面和敌人这一代似乎一切都很好,而且在我玩的时候也很有效。但是我不能让新产生的敌人重复他们自己。我尝试将“调用重复函数”放在voidstart、voidupdate和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));
            }
        }

    }

}
公共类级别GenerationsCrip:MonoBehavior{
公共游戏机;
公共游戏机;
公共游戏对象布朗普兰;
公共游戏对象测试引擎;
int firstRand;
int secondRand;
int-distPlayer=12;
int-enemyDist=7;
向量3 intPos=新向量3(0,0,0);
Vector3 enemyPos=新Vector3(0,0,0);
Vector3 enemyPos2=新Vector3(0,0,0);
无效开始(){
}
无效更新(){
if(Input.GetKeyDown(“w”))
{
firstRand=随机范围(1,4);
if(firstRand==1)
{
secondRand=随机范围(1,1);
for(int i=0;i
}

你的标签上写着“Unity”,我想你的意思是写上“Unity3d”

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

// 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);
//全局变量
List objs=new List();
//内部功能
GameObject blueIns=实例化(bluePlane)为GameObject;
objs.Add(blueIns);
GameObject testEn=实例化(testEnemy)为GameObject;
objs.Add(testEn);
至于你的调用重复问题,你还没有公布你对它的使用情况,所以我无法告诉你你做错了什么。

你的标签中的“Unity”我认为你的意思是“Unity3d”

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

// 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);
//全局变量
List objs=new List();
//内部功能
GameObject blueIns=实例化(bluePlane)为GameObject;
objs.Add(blueIns);
GameObject testEn=实例化(testEnemy)为GameObject;
objs.Add(testEn);

至于你的调用重复问题,你还没有公布你对它的使用情况,所以我不能告诉你你做错了什么。

嗨!我想在实例化敌人之后,继续在同一位置制造敌人。。我试着用“InvokeRepeating(“testEn”,1,1.5f);”来实现它,但我想它只适用于一个函数..thnx用于列表的帮助。是的,你不能将游戏对象传递到invoke,它不知道你想用它做什么。嗨!我想在实例化敌人之后,继续在同一位置制造敌人。。我试着用“InvokeRepeating(“testEn”,1,1.5f);”来实现它,但我想它只适用于一个函数..thnx用于列表的帮助。是的,你不能将游戏对象传递到invoke,它不知道你想用它做什么。嗨!我想在实例化敌人之后,继续在同一位置制造敌人。。我试着用“InvokeRepeating(“testEn”,1,1.5f);”来实现它,但我想它只适用于一个函数..thnx用于列表帮助。是的,你不能将游戏对象传递给invoke,它不知道你想用它做什么。