Как переместить объект в конкретную точку, используя физику в единстве 2D? - PullRequest
0 голосов
/ 06 июня 2018

Мне нужен объект для перемещения в конкретную точку.Во время движения он должен обнаруживать столкновения (по крайней мере, Raycast).

При использовании addForce движение объекта является неточным и не может остановиться в определенной точке.MovePosition используется для кинематических объектов (возможно, я ошибаюсь, но это не работает для моего динамического объекта).

Есть идеи, как это возможно?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

1 Перемещение объекта из точки A в точку B Используйте MoveTowards2D : https://docs.unity3d.com/ScriptReference/Vector2.MoveTowards.html

2 Для обнаружения столкновений используйте OnTriggerEnter2D или OnCollisionEnter2D : https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerEnter2D.html

Таким образом, в этом случае вы получаете:

один gameObject, который удаляется от A

- один игровой объект, который выступает в качестве стены

- один игровой объект, который является вашей точкой B.

Необходимо прикрепитьэтот скрипт для gameObject, который хочет переместиться из точки A в точку B:

public class MoveTo : MonoBehaviour
{
    public Transform pointToGo;
    public float speed;

    public bool colliding = false;

    private void Update()
    {
        if (!colliding)
        {
            //Move
            float step = speed * Time.deltaTime;
            transform.position = Vector2.MoveTowards(transform.position, pointToGo.position, step);
        }

    }

    //Callback when enter the trigger
    private void OnTriggerEnter2D(Collider2D collision)
    {
        colliding = true;

    }
}

Примечание: Помните, что как gameObject со сценарием, так и стена,должен иметь коллайдер и твердое тело.Также, если вы хотите использовать триггер, не забудьте отметить «Is Trigger» на вашем настенном коллайдере.

0 голосов
/ 06 июня 2018

Вы можете использовать MovePosition с не кинематическими объектами
https://docs.unity3d.com/ScriptReference/Rigidbody2D.MovePosition.html

rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime);

Они будут взаимодействовать с триггерами и столкновениями.Если твердое тело является кинематическим, то любые столкновения не будут влиять на само твердое тело и будут влиять только на любые другие динамические коллайдеры.

...