일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 메이플스토리
- Portfoilo
- redis
- AI Perception
- web
- Texture Streaming Pool
- Hash Table
- houdini
- Projetile
- 개발일지
- 텍스쳐 스트리밍 풀
- STL
- standart template library
- 4-legged Animal
- oracle cloud
- UE4
- database
- UE Vehicle
- standard template library
- Weapon Animation
- red black tree
- Unreal Engien
- 포트폴리오
- Zombie
- Animal IK
- UE Interface
- portfolio
- unreal engine
- inventory
- ubuntu
- Today
- Total
블로그
메이플스토리 포트폴리오 현황 본문
4. 서버에서 몬스터 위치 계산 후에 클라이언트로 전송하는데, 서버 적용하지 않은 클라이언트에서 잘 사용했던 충돌 계산을 그대로 서버에 가져놓았으나 몬스터의 위치가 충돌체와 전혀 상관없는 위치에 있음(공중에 떠있기, 땅 통과하기 등)
> 수정완료
원인과 해결방안은 다음과 같다.
우선 서버를 고려하지 않고 클라이언트를 개발할 때 충돌 처리를 다음과 같이 처리했다.
Update 이후 Scene의 살아있는(Enable상태) 오브젝트를 CollisionManager(싱글턴 매니저)의 오브젝트 리스트에 추가
> 오브젝트 리스트에 있는 오브젝트들의 충돌체 끼리 충돌 여부 계산
> 충돌 시작/충돌 중/충돌 종료 시 각각 함수를 바인딩하여 충돌 상태마다 해당하는 함수 호출
그런데 이 오브젝트 리스트에 넣는 코드에서 문제가 있었다. 클라이언트는 게임을 켠 유저 한명이 속한 Scene만을 업데이트 했지만 서버에서는 유저가 속한 Scene이 한군데가 아니다. 따라서 오브젝트 리스트에 Scene1, Scene2, ..등 다른 Scene의 오브젝트들이 한번에 들어가서 계산했기 때문에 사실 몬스터는 떠있는 것이 아닌 다른 맵의 지형 위에 올라가있었던 것이다.
해결 방안은 Scene마다 오브젝트 리스트를 채운 직후에 충돌계산을 바로 처리하고, 리스트를 비워줌으로써 각 Scene마다 따로 계산하도록 처리하였다.
이로써 가장 큰 버그들은 해결하였고 문제없이 돌아가는 중이다. 자잘한 버그들도 고쳤으므로 슬슬 ppt제작과 코딩테스트에 집중해야 할 것 같다...근데 코딩테스트 기회라도 주어진다면 감사할 따름이다..ㅜㅜ
'프로그래밍 > C++' 카테고리의 다른 글
[C++/Direct2D] 포트폴리오 : 메이플스토리 모작 (0) | 2023.05.15 |
---|---|
메이플 포트폴리오 현황(오류 수정) (0) | 2022.11.08 |
221019 메이플 포트폴리오 (0) | 2022.10.19 |