Проблемы с твердым телом в единстве

Честно говоря, я не могу понять, что не так с этим кодом. Думаю, я еще новичок в Unity, хотел бы получить некоторую помощь.

void Start()
{
    GameObject objToSpawn;
    objToSpawn = new GameObject("Obstacle");
    objToSpawn.AddComponent<Rigidbody2D>();
    objToSpawn.AddComponent<BoxCollider2D>();
    objToSpawn.AddComponent<SpriteRenderer>();
    Rigidbody2D rigid;
    rigid = GetComponent<Rigidbody2D>();
    rigid.gravityScale = 0;
    rigid.isKinematic = true;
    pos = objToSpawn.transform.position;


}

Когда программа запускается, шкала силы тяжести по-прежнему равна 1, а isKinematic по-прежнему ложно. Почему?


person TheEnthusiast    schedule 12.05.2016    source источник
comment
Вы пытаетесь изменить Rigidbody2D на objToSpawn или объект, к которому прикреплен этот сценарий?   -  person Serlite    schedule 12.05.2016
comment
Разве у вас нет Update или FixedUpdate, которые их изменяют?   -  person iuliu.net    schedule 12.05.2016


Ответы (2)


Другой ответ правильный. Вы должны использовать префаб и создавать его, когда у вас есть сложный объект. Я объясню, почему код, который у вас есть, тоже не работает. ваша ошибка в строке

rigid = GetComponent<Rigidbody2D>();

Это получит rigidBody2D из GameObject, к которому прикреплен текущий скрипт. Я предполагаю, что вы хотели сделать следующее:

rigid = objToSpawn.GetComponent<Rigidbody2D>();

В результате будет получено значениеrigidBody2D, которое находится на только что созданном вами объекте с именем objToSpawn.

person Danny Herbert    schedule 12.05.2016

Я советую вам создать префаб, а затем создать его экземпляр. Это был бы лучший способ создать новый объект, чем тот, который вы делаете. Зайдите в документацию Unity и проверьте ее параметры.

person Fortidune    schedule 12.05.2016
comment
Без проблем. Не стесняйтесь спрашивать, но попробуйте использовать доску разработки игр, если ваш вопрос больше ориентирован на игру. - person Fortidune; 13.05.2016