1일1알

몬스터 AI, 스탯 본문

유니티/C# 서버 연동 유니티 포트폴리오

몬스터 AI, 스탯

영춘권의달인 2024. 5. 8. 20:54

몬스터 AI

몬스터는 서버에서 6개의 상태로 관리를 했고, 상태가 바뀔때마다 몬스터와 같은 Room에 있는 클라이언트들에게 상태 변화 패킷을 보내 상태에 맞는 행동을 하도록 하였다.

 

몬스터의 상태는 Idle, Search, Trace, Skill, GetHit, Dead 이렇게 6가지로 나눠서 관리했다.

 

Idle은 제자리에 가만히 있는 상태이고, 일정 틱마다 주변에 플레이어가 있는지 확인하여 있으면 Target으로 지정하고 Trace상태로 넘어간다.

 

Search는 일정 범위 내에서 움직이면서 일정 틱마다 주변에 플레이어가 있는지 확인하여 있으면 Target으로 지정하고 Trace 상태로 넘어간다.

주변에 플레이어가 없다면 Idle상태와 Search상태가 주기적으로 바뀐다.

 

Trace상태에서는 Target으로 지정된 플레이어를 추적한다.

추적 중에 탐지 범위에서 벗어나거나 플레이어가 접속을 종료하여 없어지면 Target을 null로 설정하고 Idle상태로 돌아간다.

추적 중에 공격범위 내로 Target이 들어오면 Skill상태로 넘어간다.

 

Skill상태에서는 다시한번 Target의 유효성을 검사하여 플레이어가 null이거나 이미 죽었다면 Idle상태로 넘어간다. Target이 공격범위에서 벗어났다면 Trace상태로 넘어간다.

Target이 유효하고, 공격범위 내에 있다면 일정 틱마다 공격을 하여 Target에게 데미지를 입힌다.

 

어느 상태에서든 공격을 받으면 GetHit상태로 넘어간다. GetHit상태에서는 아무 행동도 하지 않다가 잠시 뒤에 Skill상태로 넘어간다. GetHit상태에서 또 공격을 받으면 GetHit상태의 시간이 연장된다.

 

몬스터의 Hp가 0이 되면 Dead상태로 넘어간다. Dead상태에서는 클라이언트가 Dead 애니메이션을 재생할동안 잠시 대기했다가 Room.Leave를 통해 Room에서 퇴장한다. Leave함수에서는 Room의 플레이어들에게 Despawn 패킷을 보내고 클라이언트에서는 해당 패킷을 받아 몬스터 오브젝트를 삭제해준다.

 

스탯

스탯은 플레이어의 레벨별로 달라지는 기본 스탯인 BaseStat과

아이템 등의 효과로 추가로 증가하는 AdditionalStat 두가지 스탯으로 나눠서 관리하였다.

몬스터에게 공격을 받으면 hp가 줄어들고, 이렇게 스탯 정보가 변경되면 해당 클라이언트에 스탯이 변경되었다는 패킷을 보내 UI에 표시되도록 하였다.