我试图用与十字路口类似的游戏玩法制作游戏,比如无限级别生成/敌人生成。在我的代码中,一切似乎与地面和敌人的生成一起工作,并且它在我玩的时候起作用。但我不能让新生的敌人重复自己。我试图将" 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));
}
}
}
}
}
答案 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问题,你还没有发布你的用法,所以我不能告诉你你做错了什么。