騎士の攻撃
CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 40/64。
チャレンジ
中級騎士がプレイヤーを捕まえたときに攻撃するようにします。
KnightStates.csでAttackStateを記述します。knight.Stop()を呼び出し、knight.playerHealth.TakeDamage(1)をすぐに実行し、その後は毎秒実行します。attackRangeより遠い場合は、追いかけます。ChaseStateで、attackRangeより近い場合は、knight.attackに切り替えます。KnightのAwakeに、attack = new AttackState(this);を追加します。
「プレイ」を押して騎士に捕まらせます。ConsoleにPlayer hp: 9と表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class PatrolState : IState
{
private Knight knight;
private int next;
public PatrolState(Knight knight)
{
this.knight = knight;
}
public void Enter()
{
}
public void Tick()
{
if (knight.PlayerDistance() < knight.sightRange)
{
knight.machine.ChangeState(knight.chase);
return;
}
Vector3 point = knight.waypoints[next].position;
if (knight.DistanceTo(point) < 0.3f)
{
next = (next + 1) % knight.waypoints.Length;
}
knight.WalkTo(knight.waypoints[next].position);
}
public void Exit()
{
}
}
public class ChaseState : IState
{
private Knight knight;
public ChaseState(Knight knight)
{
this.knight = knight;
}
public void Enter()
{
}
public void Tick()
{
float distance = knight.PlayerDistance();
if (distance > knight.loseRange)
{
knight.machine.ChangeState(knight.patrol);
return;
}
knight.WalkTo(knight.player.position);
}
public void Exit()
{
}
}
Unityのゲームアーキテクチャのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド