Как мне переместить мой gameObject(блок), чтобы при попадании блока в другой блок он останавливался (или, если быть более точным, попадание должно быть зарегистрировано первым)

GameEnvironment является 2d. Physcis нет.

У меня есть поле с тегом gameObject(gO), которое автоматически перемещается из точки A в точку B. Сценарий, прикрепленный к этому, имеет код ff:

transform.position = Vector3.Lerp (transform.position, targetPos, (Time.time-startTime)*0.0001f);

Примечание: это движение медленное.

Я также добавил к нему raycast2d, который в основном говорит, что если он попадет в другую коробку, он остановится в своей текущей позиции.

if(hit){
        if (hit.collider.tag == "box") {
            canControl = false;
            canMove = false;
            canSpawn();
        }

} else {
    canMove = true;
}

и этот, и приведенный выше код находятся в обновлении boxMovementScript.

На данный момент все хорошо, когда я убрал ящик перед другим, последний продолжает двигаться к targetPos. Когда ящик блокирует свой путь, он останавливается в своей текущей позиции.

Моя проблема возникает, когда я пытаюсь контролировать коробку, чтобы двигаться быстрее. Если перед ним находится еще одна коробка, она просто обходит коробку, и попадание никогда не регистрируется. Мой код правильного хода ниже. Это в моем пустом обновлении GameOBjectControllerScript.

if (Input.GetKeyDown(KeyCode.D) && rX !=-100){
    box.transform.position = Vector3.Lerp(atom.transform.position, rightendpos, 1);
}

Правильное положение здесь - это в основном позиция vector3, которая находится на расстоянии двух блоков от ее текущей позиции.

Как мне переместить мой gameObject (ящик) так, чтобы, когда ящик попадал в другой ящик, он останавливался?

1 ответ

Решение

Вы можете попробовать две вещи:

Сначала вы можете попробовать запустить код внутри метода FixedUpdate(), так как это лучше для физики.

Во-вторых, вы можете для своего движущегося игрового объекта-куба добавить метод OnCollisionEnter2D() в прикрепленном скрипте, более подробную информацию здесь http://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html [На странице OnCollisionEnter есть больше примеров!] также несколько других событий столкновения, таких как OnCollision2D и т. д.

Я бы попытался использовать OnCollisionEnter2D(), чтобы остановить любое движение, и, конечно, вы можете попытаться обнаружить любые теги и т. Д. Goodluck!

Другие вопросы по тегам