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

GameEnvironment - 2d. Физцис нет.

У меня есть поле с тегами 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 (box), чтобы он останавливался при попадании в другое поле?


person user3266210    schedule 02.07.2014    source источник
comment
Убедитесь, что длина / расстояние raycast2d как минимум или немного больше текущей скорости объекта в заданном направлении.   -  person LearnCocos2D    schedule 02.07.2014


Ответы (1)


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

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

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

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

person rob5300    schedule 02.07.2014