2016-05-17 4 views
0

У меня есть объект с именем ball, и при нажатии кнопки «b» я хочу, чтобы их было три. Эти три будут основаны на том, где был первый мяч. Вот код, в котором я пытаюсь это сделать.Создание трех экземпляров одного игрового объекта

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 


    } 

} 

}

Я хочу есть, когда я нажимаю "Ъ", чтобы быть три шарика на экране. Я знаю, что они будут в том же положении, но это нормально. Кроме того, когда я говорю три шара, я имею в виду, что после выполнения кода будет три. Вышеприведенный код должен создать два. Вот образ шара объекта от инспектора:

enter image description here

Ball скрипт это единственное, что получил вырезать из изображения.

При попытке кода он говорит следующее:

enter image description here

Вопрос: Как я могу это исправить и получить желаемые три шара, чтобы показать. Спасибо за любую помощь!

+0

Вы вызываете RigidBody, прикрепленный к объекту Tripleball, поэтому проверьте, есть ли у вас RigidBody для TripleBall :) На вашем снимке показан только объект шара. –

+0

Одной из проблем, связанных с вашим кодом, является 'Ball [amountOfBalls - 1];'. Это должно быть 'Ball [amountOfBalls];' если вы действительно хотите, чтобы суммарные ставки были amountOfBalls. – Programmer

+0

Другая проблема заключается в том, что 'ballArray [i] = gameObject.AddComponent ();' просто создайте новый скрипт Ball на объекте gameObject (текущий объект). Если вы хотите дублировать объект шара, вы должны сделать это 'ballArray [i] = (Ball) Instantiate (firstBall);' – Matriac

ответ

1

Ваша ошибка означает, что вы вызываете RigidBody, прикрепленный к объекту TripleBall, но на нем нет жесткого элемента. При доступе к RigidBody вы должны либо проверить, является ли оно нулевым, либо быть уверенным, что на вашем объекте есть один.

Ваша вторая проблема - объявление массива.

Ball[amountOfBalls - 1]; 

Это позволит сделать массив 1 размер меньше, чем amountOfBalls (1 в этом случае вместо ожидаемого 2). Просто удалите - 1

Ball[amountOfBalls]; 

И последняя проблема в том, что

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

просто создать новый шар скрипт на вашем объекте геймобжекты (текущий объект) .so массиве все будет относиться к другому сценарию, но на все тот же объект. Поскольку вы хотите иметь копию объекта шара, вам нужно будет использовать метод Instantiate. Это позволяет вам создать экземпляр объекта gameObject из другого объекта или даже сборных файлов. Вот как это реализовать в вашем случае.

ballArray[i] = (Ball)Instantiate(firstBall); 
Смежные вопросы