Unity物件行為3/4_跳躍延伸

Update與FixedUpdate的差別

在Update中運行程式時,執行的時間並非是固定的,由於每幀的間隔時間不同,所以Update的執行間隔時間並不同。FixedUpdate執行的間隔時間是相同的,在FixedUpdate中執行,會處理需要的物理計算。因此符合官方API的解釋,任何會影響到剛體(Rigidbody)的行為都應該被放到FixedUpdate中執行,而不適合在Update中,FixedUpdate的間隔時間是可以自定義設定。

選單列Edit/Project Settings/Time,在Inspector屬性視窗中可以設定Fixed Timestep的也就是FixedUpdate的執行間隔時間。

跳躍的延伸方法

AddForce的用法做延伸運用,基礎跳躍編輯完成後,接著要令跳躍有一個力道界線,例如超級瑪莉這款類型的遊戲,跳躍方式按住跳躍鍵久一點就會跳比較高,按一下即放就會固定跳一個高度。

  • 開啟腳本PlayerMove3,首先設定bool布林IsGround判斷是否在地板上。
  • 宣告一個新的Void回傳值,寫入OnCollisionStay碰撞器的判斷,判斷是否在Plane平面上,如果在Plane平面上就把IsGround宣告為真的。
  • 宣告新的Void FixedUpdate後,寫入if判斷式按下Space空白鍵且用&&(並且)寫入新的條件IsGround為true的時候,把velocity速度起點設定為物件起始位置,按下Space空白鍵的時候,不會依照每幀所產生施加力不斷上升,符合物理運算的跳躍,並設定能跳到最高的位置,把IsGround轉為假的,跳離程式運算。
  • 設定按鈕離開時把IsGround改為假的,使跳躍不會因為連續按下而執行兩次以上的跳躍。

跳躍的起點

設計上是固定Y軸為3的時候,會把IsGround改為假的,但是如果起始位置不在0的位置跳躍就會出現問題,這時需要記錄跳躍時的座標,在PlayerMove3腳本中編輯。

  • 宣告一個新的Vector3三維座標,命名為JumpOldPos。
  • 宣告一個bool布林HoldJump,判斷是否按住跳躍鍵。
  • 新增Void OnCollisionExit,如果離開碰撞,把當前的座標存進JumpOldPos。
  • 設定判斷式,如果按下空白鍵且站在地板上並且HoldJump為假,執行HoldJump為真並且把velocity速度起點設定為物件起始位置,施加一個向上推力後跳離,進入HoldJump為真的判斷式,持續向上施加力道,直到自身座標大於起跳時座標的Y軸3以上,把HoldJump與IsGround為設定為假並跳離,再寫入如果放開Space把HoldJump與IsGround設定為假,排除連按的問題。

相關文章

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *