Writing the Enemy Script
이번 시간에는 Enemy 스크립트를 작성하겠습니다. Scripts 폴더에 Enemy라는 스크립트를 생성하고 에디터로 엽시다.
역시 MovingObject 클래스를 상속하도록 수정합니다.
public class Enemy : MovingObject
{
...
}
| cs |
그리고 사용할 변수들을 선언합니다.
public int playerDamage; // 플레이어를 공격 시 줄어드는 포인트
private Animator animator; // 애니메이터 레퍼런스
private Transform target; // 플레이어의 위치
private bool skipMove; // 해당 턴에 이동할 것인지 결정
| cs |
다음으로 Start()를 오버라이드 하고 레퍼런스를 연결합니다.
protected override void Start ()
{
animator = GetComponent<Animator>();
target = GameObject.FindGameObjectWithTag("Player").transform;
base.Start();
}
| cs |
그리고, AttemptMove를 오버라이드합니다.
protected override void AttemptMove<T>(int xDir, int yDir)
{
// 움직임을 건너뛰어야 한다면
if (skipMove)
{
// 다음 턴을 위해 false로 만들고 건너 뜀
skipMove = false;
return;
}
base.AttemptMove<T>(xDir, yDir);
// Enemy가 이미 움직였으므로 true로 설정
skipMove = true;
}
| cs |
다음은 게임매니저가 호출하여 적들을 플레이어 쪽으로 움직이게 하는 메소드입니다.
public void MoveEnemy()
{
// 1또는 -1로 각 축의 방향을 정할 변수
int xDir = 0;
int yDir = 0;
// 둘의 x포지션이 같을 때
if (Mathf.Abs(target.position.x - transform.position.x) < float.Epsilon)
// y축 상에서 타겟 쪽으로 한칸 움직여 줌
yDir = target.position.y > transform.position.y ? 1 : -1;
else // 둘의 x 포지션이 다르다면
// x축 상에서 타겟 쪽으로 한 칸 움직여 줌
xDir = target.position.x > transform.position.y ? 1 : -1;
// Player를 대상으로 AttemptMove를 호출
AttemptMove<Player>(xDir, yDir);
}
| cs |
이번에는 OnCantMove를 오버라이드 합니다.
protected override void OnCantMove<T>(T component)
{
// component를 Player로 캐스트하여 저장
Player hitPlayer = component as Player;
// 받은 데미지만큼 음식포인트를 줄여줌
hitPlayer.LoseFood(playerDamage);
}
| cs |
조금 더 작성할 것이 있지만 차차 추가하기로 하고 일단 여기서 작성을 마칩니다.
저장합시다.
댓글 없음:
댓글 쓰기