2015-06-18 32 views
1

我正在嘗試製作類似於十字路口類似遊戲的遊戲,就像無限一代/敵人一代一樣。在我的代碼中,一切似乎都能和地面和敵人一起工作,並且在我玩的時候它就可以工作。但我不能讓新生敵人重複自己。我試圖把「Invoke重複函數」放在void Start,void Update和for循環中。但它不起作用。它只發送一個敵人。如何在Unity3D中調用重複並銷燬對象(5.1)

然後我有問題引用/找到新創建的對象(飛機/敵人),所以我可以摧毀他們,當他們不在屏幕上。

我必須以錯誤的方式構建代碼,但我無法弄清楚。

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

通過在您的標記「團結」我想你的意思把「Unity3d」

您gameobjects的實例後,推他們到一個全局列表變量,現在你可以只要你願意,就可以參考他們。

// 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問題,你還沒有發佈你對它的使用,所以我不能告訴你,你在做什麼錯。

+0

嗨!在我實例化它們之後,我想繼續使敵人在同一個位置。我試圖用「InvokeRepeating(」testEn「,1,1.5f);」但我想它只適用於函數..thnx的列表幫助。 – user5024367

+0

是的,你不能通過一個gameobject調用它不知道你想用它做什麼。 – maksymiuk