В общем, все, что вам нужно сделать, это порождать новые объекты всегда как children из этого EmptyGameObject
. Instantiate
поэтому имеет перегрузку, принимая дополнительный родительский элемент Transform
для порождения префаба как потомка.
Как я понимаю, второй скрипт также прикреплен к EmptyGameObject
, поэтому ваш целевой родитель просто transform
(Transform
компонент GameObject
, к которому присоединен этот скрипт):
//spawn model as child of given Transform
model = Instantiate(prefab, transform.position, Quaternion.identity, transform);
Также обратите внимание, что приведение к (GameObject)
является избыточным, поскольку Instantiate
в любом случае возвращает тип данного префаба.
Однако
Я не совсем понимаю, как вы здесь используете model
, model1
и Instantiate
и Destroy
. ..
Зачем вам уничтожать model
, если вы все равно хотите напрямую его возродить?
В общем, я думаю, что вы были бы намного лучше, а также производительность, вызывающая их обоих один раз и активировать и деактивировать только в зависимости от модели:
public GameObject prefab;
public GameObject prefab1;
void Start()
{
model = Instantiate(prefab, transform.position, Quaternion.identity, transform);
model1 = Instantiate(prefab1, transform.position, Quaternion.identity, transform);
model1.SetActive(false);
}
void ChangeModel()
{
counter = (counter + 1) % 2;
model.SetActive(counter == 0);
model1.SetActive(counter == 1);
}
Вот и все. Если вы просто уже поместили два префаба в EmptyGameObject
с самого начала, вам вообще не нужен Instantiate
...
И, кстати, если у вас все равно есть только два состояния вместо счетчик, вы также можете использовать простой bool
здесь:
bool isModel1;
private void ChangeModel()
{
isModel1 = !isModel1;
model.SetActive(!isModel1);
model1.SetActive(isModel1);
}
И, наконец, обратите внимание, что из вашего скрипта движения:
speed += speed + 0.5f;
это приводит к
speed = speed + speed + 0.5f;
но я думаю, что вы скорее всего хотите
speed += 0.5f;
, что приводит к
speed = speed + 0.5f;