Menu
CoddyTech

기사의 공격

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 40번째.

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 플레이그라운드