簡體   English   中英

Unity 3d 播放器跳轉不起作用,rb.addforce 不起作用

[英]Unity 3d player jump does't work, rb.addforce doesn't work

我有一個非常基本的infinite runner ,我想讓我的球員跳躍。 我已將rigidbody附加到我的播放器上,並對其進行了實例化。 這是我代碼的一部分

 void FixedUpdate()
{
    if (OnGround)
    {
        if (Input.GetKeyDown(KeyCode.Space))
        { 
            rBody.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);
            Debug.Log("jump");
            OnGround = false;
        }
    } 
}     

void onCollisionEnter(Collision other)
{
    Debug.Log("collision");
    if (other.gameObject.CompareTag("ground"))
    {
        OnGround = true;
    }
}

我試圖把這部分放在Update() ,沒有結果。 有趣的部分是Debug.Log("jump")顯示在控制台上,但玩家不想跳轉。 方法void CollisonOther()永遠不會被調用。 我也嘗試過改變velocity並使用transform.translate ,沒有結果

跳。 我怎樣才能讓它跳起來?

有幾件事可能是問題所在。 確保未選中 isKinematic 框。 也有可能角色正在跳躍,但如果您的精靈導入太大,您將看不到它(即:相對於大小,它的跳躍量非常小)。 您可以嘗試打印更多角色位置的調試語句,以查看它是否確實在更改。

OnCollisionEnter 應該有一個大寫的 O 而不是小寫。 正如所寫,永遠不會輸入 onCollisionEnter。

這是唯一可能出錯的代碼問題,假設您實際上正確地分配了其他變量。 但是,可能存在各種與游戲對象相關的行為。

地面標簽是否應用於您認為跑步者正在碰撞的游戲對象? 如果沒有,它不會跳。

跳躍者剛體的質量是否非常高? 默認值為 1,它跳得相當高,但如果質量較大,則無法獲得適當的力。

它在您的代碼中似乎是正確的,但不知道為什么不跳。 順便說一句,您可以在沒有 AddForce 的情況下嘗試使用此代碼並更改您正在使用的檢查。

if (Input.GetButtonDown("Jump") && OnGround)
{
    rBody.velocity = new Vector2(rBody.velocity.x, jumpSpeed);
}

確保它在您的 Update 方法下,因為 Input 在 Update 方法中調用。 如果您的“OnGround”層檢查是完美的,它應該可以工作。

我遇到了同樣的問題,經過數小時的調查,在我的情況下,它與代碼無關,而是與下面的 Unity 錯誤(仍然存在於 2020.1.6f1 中)有關。

出於某種原因,它干擾了我在代碼中檢查的任何鍵輸入(在您的情況下為 GetKey(KeyCode.Space)

https://issuetracker.unity3d.com/issues/urp-errors-are-constantly-thrown-when-active-input-handling-is-set-to-input-system-package

修復程序是編輯 - 項目設置 - 活動輸入處理 - 選擇兩者。

暫無
暫無

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

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