簡體   English   中英

使用Lerp進行Unity 2D碰撞和移動

[英]Unity 2D Collisions and movement with Lerp

因此,我的播放器帶有Rigidbody2d和具有連續碰撞檢測功能和動態身體類型的盒子對撞機2D。 玩家必須跳動的盒子是動態的,直到剛體被破壞以停止擺動時它們掉落為止,盒子上還有對撞機2d,但玩家仍然可以在其中移動。 播放器必須移動,因為它只能移動一定距離。 我很確定這是問題所在,但是,我不知道如何解決。 我有多個光線投射,除了玩家對角地落在盒子上之外,它們的工作效果都很好。 任何幫助將不勝感激。替代文字

謝謝

    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);

}

在此處輸入圖片說明

設置播放器的位置時,請使用Rigidbody2D.MovePosition()Rigidbody2D.position設置變換的position ,而不是直接使用變換的position屬性。 如果您要使用Rigidbody2D.MovePosition()來計算剛體上的插值設置。

剛體2D.MovePosition

剛體2D位置

例:

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;
}

這些將設置位置並堅持可能發生的任何碰撞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM