화살과 몬스터 버그와 관련한 질문입니다
169
68 asked
몬스터, 화살 이동 전부 독립적인 갱신 주기를 갖게 한 이후로 버그가 생긴 것 같습니다. 화살을 쏘는 동안에는 캐릭터가 안 움직여요.
원인은 화살이 50ms 단위로 일감을 예약하고 몬스터는 200ms로 일감을 예약하다 보니까 화살이 날아가는 중에는 화살의 Update만 호출될 수밖에 없더라고요. 최소 힙으로 예약 일감을 처리하니까요.
이를 쉽게 해결하는 건 몬스터랑 화살 둘 중에 하나를 TickRoom의 room.Update()에 넣어놓는 것인데 이건 임시방편 같고요. 헤딩해봐야 하겠지만 각 화살, 몬스터에 각각 잡큐를 두는 방식밖에 없는 것 같은데, 이런 식의 해결이 일반적인 방법에 가까울까요? 각 오브젝트마다 잡큐를 두는 것이? 실무에서 더 복잡하고 많은 오브젝트들이 처리돼야 할 때 해당 Zone에 하나만 잡큐를 두는 건 굉장히 비효율적인 것 같습니다.
뭐 어떻게든 돌아가면 되긴 하지만 정답은 없어도 오답이란 건 있으니까요. 지금처럼 GameRoom에 잡큐를 두었을 때는 투사체랑 다른 오브젝트들을 순차적으로 처리하는 건 무조건 문제가 생길 것 같고, room.Update()에 빼놓으면 갱신 주기를 조절하기 어려우니, 각각 잡큐를 두는 게 이상적인 것 같아서요.
Answer 3
0
안녕하세요, 인프런 AI 인턴입니다. literate_t님.
MMORPG 게임 개발 시 화살과 몬스터의 갱신 주기 문제로 고민하고 계시군요. 투사체와 몬스터의 갱신 주기가 서로 달라서 발생하는 문제는 비동기적인 환경에서 자주 겪는 과제 중 하나입니다.
먼저, 문제를 해결하기 위한 두 가지 일반적인 접근 방식을 말씀드리겠습니다:
잡큐를 각 객체마다 두는 것: 각 객체가 독자적으로 자신의 갱신 주기를 가짐으로써, 갱신 주기에 따른 문제를 완화할 수 있습니다. 이 방식은 실제 실무에서도 채택하는 방식 중 하나입니다. 각 오브젝트가 독립적인 작업 큐를 가짐으로써, 서로의 영향을 받지 않고 독립적으로 작업을 처리할 수 있습니다. 특히, 대량의 오브젝트가 존재하는 환경에서는 이 방법이 효율적입니다.
Zone 기반의 통합 관리: 모든 오브젝트가 하나의 잡큐에서 관리를 받는 대신, Zone이나 영역별로 잡큐를 나누어 관리할 수도 있습니다. 이 방식은 게임의 규모가 크고 복잡할 경우 효율성을 높일 수 있습니다. Zone 단위로 나뉘어진 잡큐는 해당 Zone 안의 모든 오브젝트를 관리하며, 이렇게 할 경우 메모리와 CPU 사용량을 최적화할 수 있습니다.
이 외에도 게임 디자인에 따라 다양한 방법을 시도해볼 수 있습니다. 잡큐의 구현 방식이나 구조에 따라 파생되는 문제들을 면밀히 분석하고, 상황에 맞는 최적의 해결책을 적용하는 것이 중요합니다.
관련하여 지식공유자님께서 비슷한 문제로 답변한 내용들이 있습니다:
- 화살 쏘는 것을 처리하는 방식
- 화살이 안사라지는 증상과 관련한 질문 및 루키스님의 풍부한 해결 방법
이 링크들에서는 게임 객체의 작업 스케줄링 및 처리 방식에 대해 다양한 시각과 방법이 논의되고 있습니다. 잘 활용해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
질문 있습니다.
0
42
2
심리스 존 방식 난이도
0
86
2
RewardPlayer함수 에 대해서
0
55
1
모바일 데이터 환경에서의 렉 현상 문의 드립니다.
0
88
2
화살 처리 관련 질문이 있습니다!
0
116
1
part1~9 모두 완료하였습니다.
0
209
2
이번 수업 특히 좋았습니다
0
149
1
DummyClient cpu스펙 질문있습니다.
0
120
2
InventoryManager 클래스에서 사소하지만 꼭 알고 싶은 사항이 있습니다
0
111
2
FANTASTIC UI STARTER PACK이 없네요..
0
119
1
면접 질문 드립니다.
0
146
1
로그인 정보 암호화는 어떻게 하나요?
0
231
2
조건식 중단점을 걸면 문제가 발생합니다
0
133
0
GenProto.bat 파일 오류
0
169
2
코드변경을 하면 오류가 생기는데요
0
188
2
아이템 슬롯 선적용에 대한 질문입니다
0
193
1
M1 M2강의의 경우 어느정도 수준이 필요한가요?
0
308
1
3~4일 간격으로 CPU 99% 사용되는 문제
0
421
2
JobSerializer 관련
0
287
1
3D 게임 이동 동기화
0
462
2
GameLogic 쓰레드에서 모든 GameRoom을 처리하나요?
0
255
1
Async와 Job방식의 차이가 궁금합니다.
0
293
1
EF사용시 async사용
0
254
1
해당 강의를 완강하면 실제 여러 대 PC의 환경에서 MMO구현이 가능할까요?
0
358
1

