У меня есть кольцо как игровой объект, который я перемещаю по оси y вверх и вниз с помощью клавиш клавиатуры.Как остановить движущийся объект игры, как только он столкнется с другим игровым объектом?
Как информация: Оба игровых объекта имеют прикрепленный жесткий диск, а также коллайдер.
Вот некоторый код:
// get key up and the ring will move upwards
if (Input.GetKey (KeyCode.UpArrow)&&(shouldMove))
{
transform.position += Vector3.up * speed * Time.deltaTime;
}
// get key down and the ring will move downwards
if (Input.GetKey (KeyCode.DownArrow))
{
transform.position += Vector3.down * speed * Time.deltaTime;
}
Теперь я хотел бы делать отключить движение этого кольца, как только она попадает другой объект игры. Я попробовал функцию OnCollisionEnter, которая дает мне информацию, которую я ударил объект (используя debug.log), однако, я могу продолжать двигаться его и толкая объект игры, который был спрятан ...
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.name == "Sphere") {
Debug.Log ("Hit Sphere");
}
}
Вы можете установить 'speed' до 0 и установить' 'isKinematic'to false'. –
Я уже пробовал. Но тогда, как только мой игровой объект попадает в другой, он останавливается, и я не могу больше его перемещать в другом направлении. Как я могу это приспособить? – sportente
Если вы используете 'rigidbody', вы должны использовать' Rigidbody.AddForce' или 'Rigidbody.velocity' вместо изменения' transform.position'. Лучше использовать физические компоненты, когда вы используете коллайдеры и жесткие тела. После того, как я напишу, я должен работать, но не было бы необходимости вводить 'isKinematic' в' false'. –