如何使用物理在2D中将对象移动到特定点?

时间:2018-06-06 09:24:54

标签: c# unity3d game-physics rigid-bodies

我需要一个物体移动到特定点。在运动过程中,它必须检测碰撞(至少射线投射)。

使用addForce,对象的移动不准确,无法在特定点停止。 MovePosition用于运动对象(可能我错了,但它对我的动态对象不起作用)。

任何想法如何可能?

2 个答案:

答案 0 :(得分:0)

您可以将MovePosition与非运动物体一起使用 https://docs.unity3d.com/ScriptReference/Rigidbody2D.MovePosition.html

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

他们将与触发器和碰撞相互作用。如果刚体是运动学的,那么任何碰撞都不会影响刚体本身,只会影响任何其他动态碰撞器。

答案 1 :(得分:0)

1 将对象从A点移动到B点 使用 MoveTowards2D https://docs.unity3d.com/ScriptReference/Vector2.MoveTowards.html

2 检测碰撞 使用 OnTriggerEnter2D OnCollisionEnter2D https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerEnter2D.html

所以在那种情况下,你得到了:

- 从A

移动的游戏对象

- 充当墙壁的游戏对象

-one gameObject,你的B点。

您需要将此脚本附加到想要从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”。