コライダーを使用したオブジェクトの接触判定を作成してみましょう。
Cubeに新しくスフィアコライダーを付けて接地の判定エリアを作成。
クリックでジャンプし、地面に触れている間はtrueを返します。
関連記事:
着地していればジャンプ可能
Raycastによる接地判定
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
触れた相手のコライダーを削除(無効にする)
オブジェクトの半分まで入れば実行
プレーヤーがひっくり返らないようにする
コライダーによる着地状態のフラグ
PlaneとCubeを作成。
Cubeは地面の上に配置し、リジッドボディを追加します。
ゲームビューではこのように見えています。
新しくSphere Collider を追加し、Yを-0.5まで下げ、トリガーにするにチェックを入れます。
シーンビューで真横から見ると、このように見えています。
GroundCheck.csを作成し、Cubeに追加します。
GroundCheck.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 35 36 37 38 39 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GroundCheck : MonoBehaviour { public bool isGround; private Rigidbody rb; void Start() { isGround = false; rb = GetComponent<Rigidbody>(); } void OnTriggerStay(Collider collider) { if(collider.gameObject.name == "Plane") { isGround = true; } } void OnTriggerExit(Collider collider) { if(collider.gameObject.name == "Plane") { isGround = false; } } void Update() { if(Input.GetMouseButtonDown(0) && isGround) { rb.AddForce(new Vector3(0,500,0)); } } } |
ゲームプレイして、画面上をクリックしてみましょう。
地面から離れると、Is Groundのフラグがfalseに変わります。
クリックするたびにどんどん浮上しないように、接地しているときだけ、ジャンプできるようにしています。
関連記事:
着地していればジャンプ可能
Raycastによる接地判定
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
触れた相手のコライダーを削除(無効にする)
オブジェクトの半分まで入れば実行
プレーヤーがひっくり返らないようにする