UnityでFPSをつくる その8-2 [ 敵の移動 ]

2020年7月25日

45~50行目では「Enemyのレイがどこにも触れていない時=全ての接触判定フラグが立っていない時」の移動方法を定義しています。

No.316

!」マークを頭に付けることによって条件の否定になるので、trueならfalsefalseならtrueになります。
&&」を付けると左辺と右辺の両方が条件に合致していればtrueになります。
!」で否定した条件を全て「&&」でつないでいるので、全てがfalse(フラグが立っていない)の場合に{}内の処理に進む流れです。

No.317

MoveTowards関数は始点から終点まで等速移動をする為に使っています。

No.318

Enemyオブジェクトの原点を始点、Wallオブジェクトの原点から-Z方向にEnemyオブジェクト1.5個分間隔を空けた位置を終点として、enemyTopSpeedの値で移動します。

No.319

毎フレーム等速で移動しますが、targetの位置が移動距離内に収まるフレームではtargetの位置で止まります

52~74行目と86~124行目で、各方向のレイが壁に接触した時の移動方法を定義しています。
ゲーム開始時にWall(2)へ向かったEnemyオブジェクトは、+Z方向のレイが接触したらフラグがONになり、

No.320

Wall(2)の原点にWall(2)半分のサイズを足した位置からEnemyサイズ1.5個分を引いた位置へとenemySpeedの値で移動します。

No.321

指定の位置へ到達したら、-X方向のレイがWall(1)と接触するので、

No.322

Wall(2)と同様の処理をWall(1)に置き換えて実行します。

No.323

以降、Wall → Wall(3)へと続き、壁伝いに反時計回りの移動を繰り返す流れになります。

No.324

76~79行目でレイの起点と向きを決めています。

No.325

Enemyオブジェクトの原点ではなくMeshの位置を起点にするよう、Enemy半個分をプラスしてずらしています。

No.326

実際にレイを飛ばす処理は86行目以降のPhysics.Raycastで行っています。

No.327

81~84行目でデバッグ中にレイを確認する為、色を付けています。

No.328

レイを定義した際の起点はorigin変数、向きはdirection変数に格納されているので、それに長さを掛け合わせた位置に色の付いたラインを引きます。

No.329

126行目ではtransform.LookAtでプレイヤーの位置を指定し、Enemyの正面(ローカル座標のプラスZ方向)が常にプレイヤーの方を向くようにしています。

No.330
No.331

以上で[敵の移動]の説明を終わります、おつかれさまでした!

FPS

Posted by kenji