[英]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)
修復程序是編輯 - 項目設置 - 活動輸入處理 - 選擇兩者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.