Создание префаба с классом объекта с другим значением переменной - Unity - PullRequest
1 голос
/ 05 мая 2019

вот что я пытаюсь сделать:

1) У меня есть префаб под названием bloby, просто сфера, которая содержит скрипт класса Bloby (объясню позже).

2) Мне нужно создать 10 пузырьков на экране, но каждый пузырь имеет разную скорость, поэтому я создал класс Bloby:

Код (CSharp):

public class Bloby : MonoBehaviour
{

public float speed;
public GameObject body;


public Bloby(float s, GameObject ga)
{
    this.speed = s;
    this.body = ga;
}

public void Instant(float xPos, float zPos)
{
    GameObject instance = Instantiate(this.body) as GameObject;
    instance.transform.position = new Vector3(xPos, 1, zPos);
}

}

3) Поскольку я создаю экземпляр игрового объекта, при создании объекта Bloby я передаю префаб в качестве параметра и создаю экземпляр.

4) Это работает нормально, мой Bloby создается на экране, когда я вызываю Bloby bloby = new Bloby (10, персонаж); (персонаж - объект игры)

5) Странная вещь заключается в том, что когда создается экземпляр моего объекта, сценарий Bloby (который присоединен к префабу) остается со значением переменной speed = 0, даже если я установил его равным 10, когда создал его, и переменная тела = ноль. Если я добавлю Debug.Log (скорость) в класс Bloby, он покажет 10, но значение переменной в самом скрипте не изменится.

* Вот место, где я создаю Blobies:

Код (CSharp):

public GameObject character;
Bloby bloby = new Bloby(10, character);
bloby.Instant(xPos, zPos);

Я постараюсь добавить несколько картинок, чтобы было легче понять, что я имею в виду. Спасибо

1 Ответ

0 голосов
/ 05 мая 2019

Не пытайтесь инициализировать класс, полученный из MonoBehavior, с ключевым словом new. Измените свой Bloby на это и прикрепите bloby к своему префабу:

public class Bloby : MonoBehaviour{
   public float speed;
}

Затем внешне создайте свой экземпляр, как показано ниже (т.е. в другом скрипте):

GameObject instance = Instantiate(bloby, new Vector3(xPos, 1, zPos), Quaternion.identity) as GameObject; //bloby is your prefab that you already created
instance.GetComponent<Bloby>().speed = 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...