警戒状態
CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 36/64。
チャレンジ
中級プレイヤーが近づいたら、タレットに警戒させましょう。
TurretStates.csで、頭部とプレイヤーを受け取るAlertStateを書きましょう。Enter:頭部をColor.redにし、Intruder!をログに出力します。Tick:y軸を中心にプレイヤーの方を向きます。Exit:All clearをログに出力します。Turretで、SetState(IState next)を書きましょう。古い状態のExitを呼び出し、その後、新しい状態のEnterを呼び出します。range以内なら警戒し、それ以外ではスキャンしてから、現在の状態をTickします。
「プレイ」を押して、近くまで歩いていきましょう。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class ScanState : IState
{
private Transform head;
private float angle;
private float direction = 1f;
public ScanState(Transform head)
{
this.head = head;
}
public void Enter()
{
angle = 0f;
direction = 1f;
head.GetComponent<Renderer>().material.color = Color.green;
}
public void Tick()
{
angle += 90f * direction * Time.deltaTime;
if (angle > 45f)
{
angle = 45f;
direction = -1f;
}
if (angle < -45f)
{
angle = -45f;
direction = 1f;
}
head.localRotation = Quaternion.Euler(0f, angle, 0f);
}
public void Exit()
{
}
}
Unityのゲームアーキテクチャのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド