前提・実現したいこと
Unityでタイトルの通りRigidbodyやAddforceを使わず、代わりにRaycastなどを用いた操作キャラクターの動きを制作しています。
スペースキーでジャンプする機能を実装中に以下の問題が発生しました。
発生している問題
ジャンプして地面から足が離れている時にfalse判定を出したいのだがRaycastが伸びてtrue判定のままになる
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 public float speed = 5.0f; 8 public float jump = 10.0f; 9 Animator PlayerAnimator; 10 private float distance = 1.0f; 11 protected float gravity = 1.0f; 12 void Start() 13 { 14 PlayerAnimator = GetComponent<Animator>(); 15 } 16 17 void Update() 18 { 19 Vector3 moveDirection = new Vector3(0, 0, 0); 20 Vector3 jumpDirection = new Vector3(0, 0, 0); 21 22 //Raycast処理全般 23 Vector3 rayPosition = transform.position + new Vector3(0.0f, 0.8f, 0.0f); 24 RaycastHit hitinfo; 25 Ray ray = new Ray(rayPosition, Vector3.down); 26 bool isGround = Physics.Raycast(ray, out hitinfo); 27 distance = hitinfo.distance; 28 transform.position = hitinfo.point;//接地している間はYのみ。 29 Debug.DrawRay(rayPosition, Vector3.down * distance, Color.red); 30 31 32 if (Input.GetKey(KeyCode.UpArrow)) 33 { 34 moveDirection.z = 1; 35 } 36 if (Input.GetKey(KeyCode.DownArrow)) 37 { 38 moveDirection.z = -1; 39 } 40 if (Input.GetKey(KeyCode.RightArrow)) 41 { 42 moveDirection.x = 1; 43 } 44 if (Input.GetKey(KeyCode.LeftArrow)) 45 { 46 moveDirection.x = -1; 47 } 48 49 if (Input.GetKeyDown(KeyCode.Space)) 50 { 51 jumpDirection.y = 1; 52 PlayerAnimator.SetBool("JUMP", true); 53 } 54 else 55 { 56 PlayerAnimator.SetBool("JUMP", false); 57 } 58 59 //Raycastが当たっていない(地面に足を付けていない)状態だと下に進み続けるようにしたい 60 if (isGround == false) 61 { 62 jumpDirection.y -= 1 * Time.deltaTime; 63 } 64 65 moveDirection.Normalize();//正規化 66 jumpDirection.Normalize(); 67 68 if (moveDirection.magnitude > 0.01f)//方向切替と走るモーションの管理 69 { 70 transform.rotation = Quaternion.LookRotation(moveDirection); 71 PlayerAnimator.SetBool("RUNNING", true); 72 } 73 else 74 { 75 PlayerAnimator.SetBool("RUNNING", false); 76 } 77 78 moveDirection *= speed * Time.deltaTime; 79 jumpDirection *= jump * Time.deltaTime; 80 transform.position += moveDirection; 81 transform.position += jumpDirection; 82 Debug.Log(isGround); 83 } 84} 85
試したこと
transform.position = hitinfo.point;をコメントアウト
→落下してくれない
アニメーション処理のPlayerAnimator.SetBool("JUMP", false);のすぐ上にjumpDirection.y = 1;と記述
→挙動がおかしくなる
補足情報(FW/ツールのバージョンなど)
Visual Studio 2022
Unity 2020 3.4f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。