Raycastを使って、地面の接触判定をつくってみましょう。
Cubeの下にRayを出して可視化。
床に接地していればTrue、離れるとFalseを返し、コンソールに表示させます。
このようなRaycastを使えば、より詳細に、当たり判定を設けることができます。
関連記事:
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
オブジェクトに触れていれば動く
ジャンプで壁に触れると引っ付く
クリックした位置にオブジェクトを生成(Ray)
Rayが当たった位置までの距離
Rayに当たったオブジェクトを削除
Rayの照射が外れれば向きを変える
Debug.DrawRayによる可視化
平面とCubeを作成し、Cubeを地上に出します。
Cubeにリジッドボディを追加します。
ジャンプの動きと、Raycastの接地判定、可視化のプログラムを作成します。
CubeJump.csを作成し、Cubeに追加します。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeJump : MonoBehaviour { private Rigidbody rb; private int upForce; private float distance; void Start() { rb = GetComponent<Rigidbody>(); upForce = 300; distance = 1.0f; } void Update() { Vector3 rayPosition = transform.position + new Vector3(0.0f, 0.0f, 0.0f); Ray ray = new Ray(rayPosition, Vector3.down); bool isGround = Physics.Raycast(ray, distance); Debug.DrawRay(rayPosition, Vector3.down * distance, Color.red); if(Input.GetMouseButtonDown(0)) { rb.AddForce(new Vector3(0,upForce,0 )); } Debug.Log(isGround); } } |
ゲームプレイして、シーンビューを見てみましょう。
Rayが下方向に向かって、赤線で表示されています。
rayPositionには、Rayのスタート位置を格納しています。
今回、スタート位置はすべて0としていますが、プレーヤーを基準として、座標で細かく設定することができます。
rayには、スタート位置と、Rayを飛ばす方向を格納。
Vector3.downは下方向を指します。
下方向に向かって、長さ1.0のRayが出現。
これを、bool型のisGroundに入れ、接地判定を行います。
Debug.DrawRayでは、スタート位置、方向と長さ、色を入れて、Rayを目に見える状態にします。
クリックしてジャンプしてみましょう。
接地状態ではtrueに、ジャンプして地面から離れると、falseに変わります。
関連記事:
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
オブジェクトに触れていれば動く
ジャンプで壁に触れると引っ付く
クリックした位置にオブジェクトを生成(Ray)
Rayが当たった位置までの距離
Rayに当たったオブジェクトを削除
Rayの照射が外れれば向きを変える