最近めっきりUnityにハマっています。今日はゾンビに追いかけられる恐怖体験を実装してみたいと思います。
前回のタイトル画面をコピーするところから始めます。
Unityで画面遷移する - ゾンビの部屋にタイトル画面を実装
UnityチュートリアルのSurvial Shooter Creating Enemy #1を参考にやっていきます。
ゾンビ側の設定
前回のタイトル画面とは別に作りたいのでシーンをコピーしておきます。やり方は簡単なので割愛。こんな感じでゾンビが配置された状態からスタートです。
どのゾンビでもいいので、Add Component
していきます。
Rigidbody
は、Constraints
のFreeze Position
のYのみチェック、Freeze Rotation
のXとZにチェックを入れて転がったりしないようにします。
Capsule Colider
はCenter
をX:0, Y:1, Z:0
にする。
Sphere Colider
はIs Trigger
をチェック、Center
をX:0, Y:1, Z:0
にする。
Nav Mesh Agent
は、Speed:0.2, Radius:0.3, Height: 1.8
に変更。このNav Mesh Agent
というのでフィールドを学習して移動できる範囲を決めることが出来ます。詳しくはあんまり分かっていないけど。
プレイヤーの配置
以前、Unityで3Dオレの部屋を作って歩き回るでやったとおりにPlayerを配置し、同様に、Main Camera
オブジェクトにFollowPlayer
スクリプトを設定して、それぞれのRotation
で向きを揃える。今回はY:90
にしている。
NavMeshでゾンビの移動を設定する
Window -> AI -> Navigation
を開く。
Bake
を開いて、Agent Radius:0.75, Agent Height: 1.9, Step Height:0.38
を設定する。それぞれの数値はゾンビの大きさに合わせるっぽいがまだあんまり理解してない。
Bake
ボタンを押す。これで学習してくれるっぽい?
続いて、NavMeshを使ってプレイヤーを追いかけるスクリプトを書きます。ゾンビにNew Script
をAdd Component
します。
EnemyMovement.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyMovement : MonoBehaviour { Transform player; UnityEngine.AI.NavMeshAgent nav; void Awake() { player = GameObject.FindGameObjectWithTag("Player").transform; nav = GetComponent<UnityEngine.AI.NavMeshAgent>(); } void Update() { nav.SetDestination(player.position); } }
最後に全てのゾンビさんに反映させるためにPrefab
にApply All
します。
たったこれだけ。簡単!!
こんな感じで3体のゾンビさんが追いかけてきます。
残り
Nav Mesh Agent
を設定するとなぜかゾンビさんが少しだけ浮遊してしまいます。Navigation -> Bake
のStep Height
あたりを疑っているんですがまだ未解決。
あと、ゾンビさん登場時にidel
アニメーションが入っているのですが、問答無用にプレイヤーを追跡してくるので、起動時に歩いていないのに空中を滑るように移動してくる点も未解決。