前提・実現したいこと
横スクロール型アクションゲーム(3D)で、
敵が足場から落ちるときにゆっくり斜めに下がっていくのではなく、
ストンと下に落ちるようにしたいと思っています。
そこで、接地判定のトリガーを敵キャラの足元に配置し、
接地中は横方向、接地していないとき(落下中)は下方向に動くようにVelocityを切り替えようと考えました
(落下中は Vector3 (0, -5, 0)などにする)。
トリガーのスクリプトで接地(下記"OnGround")のtrue/falseを切り替え、
それを敵スクリプトが取得し、if構文でVelocityを切り替える仕組みを作ったのですが、
実行してみると、接地していない間も動きが変わりません。
さらに、以前は実行できていた左右の向き(enemyEulerAngles.y)による左右移動の切り替えも無効になってしまいました。
if構文を変えるなど、様々試してみたのですが解決できません。
もし改善点がお分かりでしたら、教えて頂けると嬉しいです。
該当のソースコード
【敵本体のスクリプト】
public class enemyMovement : MonoBehaviour { private int layermask = 1 << 0 | 1 << 16; public Vector3 leftVelocity;//inspectorで(-4, 0, 0)に設定 public Vector3 rightVelocity;//inspectorで(4, 0, 0)に設定 public Vector3 leftFallVelocity;//inspectorで(-0.1, -5, 0)に設定 public Vector3 rightFallVelocity;//inspectorで(0.1, -5, 0)に設定 public GameObject GroundCheckTrigger;//inspectorでトリガーのオブジェクトを設定 RaycastHit hit; void Start() { layermask = 1 << 0 | 1 << 16; } void Update() { Vector3 enemyEulerAngles = this.transform.localEulerAngles; Rigidbody enemyRB = this.transform.GetComponent<Rigidbody>(); GroundChecker GroundCheck = GroundCheckTrigger.gameObject.GetComponent<GroundChecker>(); if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.left), out hit, 1.3f, layermask))//レイキャストで、壁(layer 0)と敵(layer 16)へのヒットを判定 { if (enemyEulerAngles.y == 0)//敵が左向きの場合 { transform.eulerAngles = new Vector3(0, -180, 0);//敵を右向きにする } else//左向きでなければ { transform.eulerAngles = new Vector3(0, 0, 0);//右向きにする } } if (enemyEulerAngles.y == 0)//敵が左向きのとき { if (GroundCheck.OnGround = true) { enemyRB.velocity = leftVelocity; } else if (GroundCheck.OnGround = false) { enemyRB.velocity = leftFallVelocity; } } else if (enemyEulerAngles.y == -180)//敵が右向きのとき { if (GroundCheck.OnGround = true) { enemyRB.velocity = rightVelocity; } else if (GroundCheck.OnGround = false) { enemyRB.velocity = rightFallVelocity; } } } }
【接地判定トリガーのスクリプト】
public class GroundChecker : MonoBehaviour { public bool OnGround; void Start() { OnGround = false; } void OnTriggerEnter(Collider collision) { OnGround = true; } void OnTriggerExit(Collider collision) { OnGround = false; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 08:38
2020/07/11 08:43
2020/07/11 08:49
2020/07/11 08:53
2020/07/11 08:54
2020/07/11 08:57 編集
2020/07/11 09:13 編集
2020/07/11 09:18 編集
2020/07/11 09:20
2020/07/11 09:26
2020/07/11 09:27 編集
2020/07/11 10:03 編集
2020/07/11 10:04
2020/07/11 10:07
2020/07/11 13:47