2016-05-17 86 views
0

我有一個名爲ball的對象,並在按下按鈕「b」時,我希望在那裏有三個對象。這三個將基於第一球的位置。這是我正在嘗試這樣做的代碼。生成一個gameobject的三個實例

public class TripleBall : MonoBehaviour { 

public Ball firstBall; 
private int amountOfBalls = 2; 
private Ball[] ballArray; 
private bool start, avail, located; 
void Start() { 
    ballArray = new Ball[amountOfBalls - 1]; 
    start = false; 

    for (int i = 0; i < ballArray.Length; i++) 
     ballArray[i] = gameObject.AddComponent<Ball>(); 


} 

// Update is called once per frame 
void Update() { 
    if (Input.GetKeyDown(KeyCode.B)) 
     start = true; 
    if (start) 
    { 
     //Begin locator: Makes it so when the balls spawn they spawn where the first ball 
     if (!located) { 
      for (int i = 0; i < ballArray.Length; i++) 
      { 

       ballArray[i].transform.position = firstBall.transform.position; 
      } 
      located = true; 
     } 
     //End locator : if statement and loop 


    } 

} 

}

我想在那裏,當我點擊 「B」 是在屏幕上三個球。我知道他們會處於相同的位置,但沒關係。另外,當我說三個球時,我的意思是代碼執行後會有三個球。上面的代碼應該創建兩個。下面是檢查球物體的圖像:

enter image description here

Ball腳本是得到了切出的圖像的唯一的事情。

當我嘗試的代碼,它說以下內容:

enter image description here

問:我怎樣才能解決這個問題並得到所需的三個球露面。謝謝你的幫助!

+0

你叫RigidBody附加到Tripleball對象,所以檢查你是否有附加到TripleBall的RigidBody :)你的圖片只顯示球對象。 –

+0

代碼中有一個不相關的問題是'Ball [amountOfBalls - 1];'。這應該是'Ball [amountOfBalls];'如果你真的想讓amountOfBalls成爲amountOfBalls。 – Programmer

+0

另一個問題是'ballArray [i] = gameObject.AddComponent ();'只在對象gameObject(當前對象)上創建一個新的腳本Ball。如果你想複製球對象,你應該做這個'ballArray [i] =(Ball)Instantiate(firstBall);' – Matriac

回答

1

你的錯誤意味着你正在調用連接到TripleBall對象的RigidBody,但是它沒有剛體。訪問RigidBody時,您應該檢查它是否爲空或確保對象上有一個。

你的第二個問題是數組聲明。

Ball[amountOfBalls - 1]; 

這將使數組1的大小小於amountOfBalls(在本例中爲1,而不是2)。只是刪除- 1

Ball[amountOfBalls]; 

而最後一個問題是,

ballArray[i] = gameObject.AddComponent<Ball>(); 

只是你的對象遊戲對象(當前對象)。所以,你的陣列都會指向不同的腳本,但在上創建一個新的腳本球所有相同的對象。因爲你想擁有你的球對象的副本,你將不得不使用Instantiate方法。這使您可以從其他對象甚至預製件中實例化一個gameObject。以下是如何在你的情況下實現它。

ballArray[i] = (Ball)Instantiate(firstBall); 
相關問題