前提・実現したいこと
お世話になります。
Unity2020.3.10f1でアクションゲームの敵AIを作っています。
敵CPU(写真右)が接地していたらtrueを返しfalseなら下に飛ばしたRayで地面を検知して真偽の値を返すという処理を行っています。
望む結果としてはIsGroundedもしくはRayの結果をtrueにしたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
現状として、Isgroundedはfalseを返し、Rayも特にレイヤーなどを指定していないのにfalseを返します。プレイヤーとしておいてあるオブジェクトにはRayは無くともIsgroundedで接地判定を取っていますがそちらは正常に作動しています。
該当のソースコード
C#
1ソースコード 2using UnityEngine; 3using UnityEngine.AI; 4 5//CPU操作 6public class CPUCon : MonoBehaviour 7{ 8 public GameObject NearTarget; //最も近い敵 9 private NavMeshAgent CpuAgent; //CPUのエージェント 10 private CharacterController controller; //キャラクターコントローラー 11 private Ray IsGroundedRay; //地面判定光線 12 13 public float speed = 6.0F; //歩行速度 14 public float jumpSpeed = 8.0F; //ジャンプ力 15 public float gravity = 20.0F; //重力の大きさ 16 17 private Vector3 moveDirection = Vector3.zero; 18 private bool IsJump = false; //ジャンプフラグ 19 private float h = 0; //左右矢印キーの値(-1.0~1.0) 20 private float searchTime = 0; //探索時間 21 22 // Start is called before the first frame update 23 void Start() 24 { 25 CpuAgent = GetComponent<NavMeshAgent>(); //NavmeshAgentを取得 26 controller = GetComponent<CharacterController>(); //キャラクターコントローラー 27 NearTarget = SerchTag(gameObject, "Character"); //自分以外の最も近い敵を探索 28 } 29 30 // Update is called once per frame 31 void Update() 32 { 33 OnGroundCheck(); //接地判定 34 SerchCharacter(); //近場の敵を探索 35 Debug.Log(CheckGrounded()); //接地判定のログ 36 Debug.DrawRay(transform.position + Vector3.up * 0.1f, Vector3.down, Color.red); //レイ可視化 37 } 38 39 //接地判定 40 public bool CheckGrounded() 41 { 42 if (controller.isGrounded) return true; //接地判定取れたら真を返す 43 44 //Debug.Break(); 45 //isGrounded取れなかったために補助 46 //下に向けてRayを飛ばす 47 IsGroundedRay = new Ray(transform.position + Vector3.up * 0.1f, Vector3.down); 48 //探索距離 49 float SerchDis = 0.5f; 50 //StageFieldレイヤーでなんかに当たればTrueを返す 51 return Physics.Raycast(IsGroundedRay, SerchDis,LayerMask.NameToLayer("StageField")); 52 } 53 54 void OnGroundCheck() 55 { 56 57 if (controller.isGrounded) //接地していれば 58 { 59 CpuAgent.isStopped = false; 60 //moveDirection.y -= gravity * Time.deltaTime; 61 } 62 else 63 { 64 CpuAgent.isStopped = true; 65 //moveDirection.y -= gravity * Time.deltaTime; 66 } 67 } 68} 69 70
試したこと
Physics.Raycastのレイヤー指定をDefaultにしてみたり→falseでした。
Rayの長さを
補足情報(FW/ツールのバージョンなど)
Unity2020.3.10f1
Visual Stadio2019
回答1件
あなたの回答
tips
プレビュー