スペースキー押すせば、キャラクターがジャンプする仕組みをつくっていきましょう。
地面に接しているときはジャンプ可能。空中にいる間は、ジャンプ不可能にします。
関連記事:
着地していればジャンプ可能(Raycast)
着地していればジャンプ可能(Collider)
クリックした方向へジャンプする
ジャンプした距離を表示する
斜めにジャンプする
ジャンプを続けながら壁をのぼる
シフトキーでジャンプの高さを2倍にする
ダブルジャンプの仕組み
AddForceを使ったジャンプとvelocityによるジャンプ
マウス長押しでジャンプ力を溜める
RigidBodyを使ったジャンプ
今回の制作では、Golden Tigerというフリーのアセットを使用させていただきました。
地面として、平面オブジェクトを作成しましょう。
Plane(平面)には黒色をつけました。
続いて、キャラクターのオブジェクトを配置します。
タイガーのデータがいくつか用意されているのですが、今回は tiger_idle を使用しました。
シーンビューではこのように見えています。
地面との接地判定をするために、スフィアコライダーを作成します。
トリガーにするにチェックを入れ、サイズを0.1まで縮小しました。
コライダーを横から確認すると、このように地面の中に半分埋まっている状態です。
続いて、ボックスコライダーを追加します。
このコライダーは、キャラクターの体として扱います。
コライダーを編集して、タイガーの体を囲みます。
真横から確認します。
下は地面にぴったり付くあたりまで下げましょう。
次に、リジッドボディを追加します。
ジャンプのためのスクリプトを作成します。
Player.csを作成し、tiger_idleに追加します。
Player.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private Rigidbody rb; private int upForce; private bool isGround; void Start() { rb = GetComponent<Rigidbody>(); upForce = 200; } void Update() { if(Input.GetKeyDown("space") && isGround) rb.AddForce(new Vector3(0, upForce, 0)); } void OnTriggerStay(Collider other) { if (other.gameObject.name == "Plane" ) isGround = true; } void OnTriggerExit(Collider other) { if (other.gameObject.name == "Plane" ) isGround = false; } } |
ゲームプレイして、Spaceキーを押してみましょう。
ポイントは、地面に接しているかどうかの判定(スフィアコライダーのトリガー)です。
これが無ければ、スペースキーを連打すると、どんどん上に上がってしまうんですね。
着地しているときのみ、ジャンプが効くようにしています。
次回はジャンプのアニメーションについてご紹介します。
関連記事:
着地していればジャンプ可能(Raycast)
着地していればジャンプ可能(Collider)
クリックした方向へジャンプする
ジャンプした距離を表示する
斜めにジャンプする
ジャンプを続けながら壁をのぼる
シフトキーでジャンプの高さを2倍にする
ダブルジャンプの仕組み
AddForceを使ったジャンプとvelocityによるジャンプ
マウス長押しでジャンプ力を溜める