2016-05-17 36 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); 
相关问题