일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 수학
- 다이나믹 프로그래밍
- 자료구조
- 투 포인터
- 브루트포스
- DFS
- 시뮬레이션
- 구현
- Team Fortress 2
- 알고리즘
- 그리디 알고리즘
- 다익스트라
- 그래프
- 누적 합
- 우선순위 큐
- 문자열
- c++
- 유니티
- Unreal Engine 5
- VR
- 정렬
- 트리
- 백준
- 백트래킹
- 재귀
- ue5
- XR Interaction Toolkit
- 스택
- BFS
- 유니온 파인드
- Today
- Total
1일1알
몬스터 AI, 스탯 본문
몬스터 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에 표시되도록 하였다.
'유니티 > C# 서버 연동 유니티 포트폴리오' 카테고리의 다른 글
몬스터 처치, 플레이어 리스폰 (0) | 2024.05.10 |
---|---|
캐릭터 애니메이션, 콤보공격, 스킬, 몬스터 피격모션 (0) | 2024.05.09 |
이동 동기화 (0) | 2024.05.06 |
플레이어 입장, 퇴장 (0) | 2024.05.05 |
게임 입장 (0) | 2024.05.04 |