Unity 2D碰撞和Lerp运动

时间:2018-02-24 04:21:11

标签: c# unity3d

所以我有一个带有Rigidbody2d的玩家和一个具有连续碰撞检测和动态体型的箱式对撞机2D。玩家必须跳的盒子是动态的,直到他们的刚体被摧毁以便停止摇晃时,盒子上还有一个对撞机2d,但玩家仍可以穿过它。玩家必须以lerp移动,因为它必须只移动一定距离。我很确定这是问题,但是,我不知道如何解决它。我有多个光线投射,除非玩家对角地落在盒子上,否则效果非常好。任何帮助将非常感激。盐文本

由于

    void update(){
    if (Input.GetAxis("Horizontal") > 0 && moveRight == true && moveRightTimer <= 0)
        {
            moveRightTimer = 0.15f;
            moveX += moveDistance;
            if(gameObject.transform.localScale.x < 0)
            {
                flipPlayer();
            }
        }
    }
    void FixedUpdate()
        {
            MovePlayer();
        }
    //Moves the player
    void MovePlayer()
    { 
        Vector2 PlayerPos = gameObject.transform.position;
        PlayerPos.x = moveX;

    GetComponent<Rigidbody2D>().MovePosition(PlayerPos + (Vector2)transform.position * Time.deltaTime);

}

enter image description here

1 个答案:

答案 0 :(得分:0)

设置播放器的位置时,请使用Rigidbody2D.MovePosition()Rigidbody2D.position来设置转换的位置,而不是直接设置转化的position属性。 Rigidbody2D.MovePosition()会考虑你的刚体上的插值设置,如果你想要使用它的话。

Rigidbody2D.MovePosition

Rigidbody2D.position

示例:

public Rigidbody2D rigid;
public bool UseMovePosition;

void Awake()
{
    rigid = GetComponent<Rigidbody2D>();
}

void FixedUpdate()
{
    if (UseMovePosition)
        rigid.MovePosition(transform.position + transform.forward * Time.deltaTime);
    else
        rigid.position = transform.position + transform.forward * Time.deltaTime;
}

这些将设置位置并遵守可能发生的任何碰撞。