Menu
CoddyTech

騎士の攻撃

CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 40/64。

challenge icon

チャレンジ

中級

騎士がプレイヤーを捕まえたときに攻撃するようにします。

  1. KnightStates.csでAttackStateを記述します。knight.Stop()を呼び出し、knight.playerHealth.TakeDamage(1)をすぐに実行し、その後は毎秒実行します。attackRangeより遠い場合は、追いかけます。
  2. ChaseStateで、attackRangeより近い場合は、knight.attackに切り替えます。
  3. 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プレイグラウンド