일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 자료구조
- 트리
- 시뮬레이션
- 스택
- 다익스트라
- 우선순위 큐
- VR
- 누적 합
- 구현
- ue5
- Unreal Engine 5
- 브루트포스
- 재귀
- 정렬
- DFS
- 백트래킹
- 유니티
- 그래프
- Team Fortress 2
- XR Interaction Toolkit
- 수학
- 유니온 파인드
- 다이나믹 프로그래밍
- 알고리즘
- 그리디 알고리즘
- c++
- 문자열
- 투 포인터
- BFS
- Today
- Total
목록유니티 (41)
1일1알
말풍선은 채팅 패킷이 오면 플레이어의 위에 뜨도록 했고, DoTween을 사용해 부드럽게 연출되도록 했다. 대쉬를 사용하면 플레이어가 바라보는 방향으로 빠르게 이동하도록 하였고, 구르는 애니메이션이 재생되도록 하였다. 대쉬 도중에는 이동과 회전을 하지 못하게 막아두었다. 몬스터가 죽으면 재화와 아이템이 드랍되도록 하였다.드랍된 아이템이 모든 플레이어에게 보이게 하기 위해 서버에서 아이템을 Spawn시키고, 아이템을 획득하면 해당 아이템 정보를 플레이어에 추가시키고 아이템을 Despawn시켰다. 현재 아이템 정보를 인벤토리를 통해 볼 수 있도록 하였다.
채팅은 서버에서는 크게 하는건 없다.후에 파티 시스템도 만드는데, 만약 가입한 파티가 없다면 플레이어가 속한 Room의 모든 플레이어에게 해당 채팅을 다시 전송하고, 가입한 파티가 있다면 파티원들에게 채팅을 전송해준다. 클라이언트에서는 채팅 패킷을 받으면 채팅 메세지 UI를 만들고 채팅UI에 있는 Scroll View의 Content의 자식으로 붙여준다. 그냥 추가만 해주면 스크롤바가 위로 올라가는데, 이를 방지하기 위해 추가할때마다 스크롤바의 value를 0으로 설정하여 스크롤바가 올라가지 않도록 해주었다. Enter로 채팅을 전송한 뒤 게임 화면을 클릭하지 않으면 InputField에서 포커스가 풀리지 않아서 움직이다가 채팅창이 갑자기 켜지는 현상이 있었는데, 이것을 해결하느라 삽질을 좀 많이 했다...
몬스터의 Hp가 0이되면 디스폰되고, 잠시 뒤 몬스터의 스폰 위치에 다시 스폰된다.플레이어의 Hp가 0이되면 죽는 애니메이션을 재생해주고 잠시 뒤 Hp와 Mp를 회복시키고 리스폰 장소로 리스폰시킨다.

서버로부터 이동 패킷을 받으면 클라이언트에서는 Movement 클래스에서 해당 정보를 받아서 처리한다.패킷으로 온 목표 위치 정보와 방향 정보를 저장하고 Update문에서 서서히 움직이도록 한다.목표 위치 정보를 이용해 애니메이션도 재생해준다.단순히 움직이는 상태는 Locomotion이라는 상태로 지정했고, Blend Tree를 사용해 움직이는 방향에 맞도록 애니메이션이 재생되도록 하였다. 스킬 정보는 Json으로 저장하여 관리하였다.skillTime은 스킬이 시전되는 시간, delayTime은 스킬이 시전되고 애니메이션의 공격이 적중되는 시점까지 걸리는 시간이다.연속 공격을 구현한 방법이다.기본공격은 연속공격 4까지 있고, 예를들어 공격1 도중에 일반공격 입력이 들어오면 다음 공격을 예약해주고, 클라이..
몬스터 AI몬스터는 서버에서 6개의 상태로 관리를 했고, 상태가 바뀔때마다 몬스터와 같은 Room에 있는 클라이언트들에게 상태 변화 패킷을 보내 상태에 맞는 행동을 하도록 하였다. 몬스터의 상태는 Idle, Search, Trace, Skill, GetHit, Dead 이렇게 6가지로 나눠서 관리했다. Idle은 제자리에 가만히 있는 상태이고, 일정 틱마다 주변에 플레이어가 있는지 확인하여 있으면 Target으로 지정하고 Trace상태로 넘어간다. Search는 일정 범위 내에서 움직이면서 일정 틱마다 주변에 플레이어가 있는지 확인하여 있으면 Target으로 지정하고 Trace 상태로 넘어간다.주변에 플레이어가 없다면 Idle상태와 Search상태가 주기적으로 바뀐다. Trace상태에서는 Target으로..
멀티플레이 게임에서는 모두 같은 화면을 볼 수 있어야 하기 때문에 오브젝트들의 위치를 실시간으로 맞춰주어야 한다. 동기화 작업에는 크게 두가지 경우가 있다.하나는 클라이언트에서 먼저 움직인 뒤 서버에 확인을 받는 것이고다른 방법은 서버에 허락을 받고 움직이는 것이다. 반응성이 중요한 Fps같은 게임들은 주로 첫번째 방식을 사용하고, 비교적 덜 중요한 MMORPG같은 게임들은 주로 두번째 방법을 사용한다고 한다. 나는 두번째 방법을 사용했다. 매 프레임마다 서버와 패킷을 주고받을수는 없기 때문에 위치, 방향 정보 등을 이용해 위치를 예측하고, 어긋났다면 다시 조정해주는 등의 작업이 필요하다. 처음에 패킷을 설계할때는 이동 방향, 바라보는 방향 정보만 서로 주고받도록 했더니 플레이어가 움직일수록 위치가 어긋..