プレーヤーがジャンプした距離を計算して、表示させてみましょう。
ジャンプの操作については、キャラクターコントローラーを使い、接地判定にはRaycastを使用します。
ジャンプ地点と着地点から、飛距離を算出して、コンソールに表示します。
関連記事:
CharacterController.Moveによるジャンプ移動
Raycastによる接地判定
着地していればジャンプ可能
クリックした方向へジャンプする
飛んだ距離を測定するスクリプト
CubeとPlane(平面)を作成し、CubeのYを0.5にして地上に配置します。
Cubeにキャラクターコントローラーを追加します。
コンポーネントを追加 > 物理 > キャラクターコントローラー
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeJump : MonoBehaviour { private float rayDistance; private float speed = 6.0f; private float jumpSpeed = 8.0f; private float gravity = 20.0f; private Vector3 moveDirection = Vector3.zero; private CharacterController controller; private float startPos; private float groundPos; private float jumpDistance; void Start() { controller = GetComponent<CharacterController>(); rayDistance = 1.0f; } void Update() { //Raycastによる接地判定 Vector3 rayPosition = transform.position + new Vector3(0.0f, 0.0f, 0.0f); Ray ray = new Ray(rayPosition, Vector3.down); bool isFloor = Physics.Raycast(ray, rayDistance); Debug.DrawRay(rayPosition, Vector3.down * rayDistance, Color.red); //CharacterControllerを使ったジャンプ移動 if (controller.isGrounded) { moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection = moveDirection * speed; if (Input.GetButtonDown("Jump")) { moveDirection.y = jumpSpeed; } } moveDirection.y = moveDirection.y - (gravity * Time.deltaTime); controller.Move(moveDirection * Time.deltaTime); //ジャンプした距離の計算 if(isFloor) { startPos = this.transform.position.x; } else { groundPos = this.transform.position.x; jumpDistance = groundPos - startPos; Debug.Log(jumpDistance); } } } |
ゲームプレイしてみましょう。
十字キーで前後左右を移動し、スペースキーでジャンプ。
コンソールを確認すると、ジャンプの距離が表示されています。
このプログラムは、大きく3つの役割に分かれています。
まずはRaycastによる接地判定。
プレーヤーの下部に、Rayを表示させ、これによって地面に接触しているか判定します。
続いて、CharacterControllerを使ったジャンプ移動のプログラムが続きます。
最後に、着地点(groundPos)から、ジャンプ開始地点(startPos)を引き算して、飛んだ距離を算出しました。
関連記事:
CharacterController.Moveによるジャンプ移動
Raycastによる接地判定
着地していればジャンプ可能
クリックした方向へジャンプする