기사의 공격
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 40번째.
챌린지
중급기사가 플레이어를 붙잡으면 공격하게 하세요.
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 플레이그라운드