티스토리 뷰
오늘은 Unity에서 멀티플레이 구현을 위한 기본적인 지식을 배우고자한다.
우선 멀티플레이 구현을 위해 필요한 8가지 요소를 알아보자
1) 네트워크 지연에 대한 허용수준 (Latency tolerance)
- 네트워크 지연(Network latencies)은 먼거리에 있는 사람끼리, 혹은 이용하는 통신망에 따라 발생 할 수 있다.
- 다른사람과 함께 플레이하기 위해서는 모든 플레이어가 같은 수준의 정보를 가질때 까지 기다려야 하기 때문에,
- 게임을 만들 때 이러한 네트워크지연을 얼마만큼 허용할 것인지 정해야 한다.
- 네트워크 지연은 예측(prediction)과 조정(reconciliation) 등의 기술을 이용하여 어느정도 완화 시킬 수 있다.
2) 세션당 플레이어 숫자(Players per session)
- 동시에 여러 접속자들을 관리할 때 사용되는 네트워크 모델은, 이용자 숫자에 한계가 존재한다.
- 사람들이 많을 수록 더 많은 네트워크 동기화가 필요하기 때문에, 동시 접속자 수를 잘 결정해야 한다.
- 동기화 해야하는 정보의 수준을 낮추는 것으로, 더 많은 사람들이 동시에 플레이 하도록 도울 수 있다
3) 동기화 규모 (Synchronized simulation scale)
- 동기화되는 정보의 크기는, 네트워크 속도에 큰 영향을 미칠것이다.
- 네트워크 통신을 원활하게 하기 위해서는 '무엇을 동기화 할것인가'를 잘 정의할 필요가 있다.
- 몇몇 데이터는 동기화 되지 않아도, 게임플레이에 영향을 미치지 않기 때문이다 (예를들어 맵의 배치 등)
- 그밖에 동기화 규모를 최적화 하기 위해 아래와 같은 방법이 사용될 수 있다. *mitigations : 완화조치
- 동기화 주기를 조절하기
- 분할하여 동기화 하기 (예를들어 맵 전체를 동기화 하는게 아니라, 플레이어 시야에 보이는 수준까지만 동기화)
- 사람들이 관심 있는 내용만 (혹은 중요한 내용만) 동기화 하기
4) 연산의 정확성 (Precision)
- data 연산의 정확도가 올라갈 수록 많은 resorce를 사용하게 된다.
- 하지만 게임속 모든 연산이 다 중요하지 않으며, 따라서 어떤 경우에는 대략적인 계산만 필요한 경우도 존재한다.
- 따라서, 게임에서 중요한 연산이 아닌 나머지에 대해서 정확성을 낮추면 전반적인 성능을 향상 시킬 수 있다.
5) 서버 구축에 필요한 비용 (Cost)
- 서버의 종류에 따라 비용이 부과되는 방식이 다르기 때문에 이를 잘 알아야한다.
6) 개발의 복잡성 (Developer Complexity)
- 네트워크환경을 개발하기 위해서는 여러가지 복잡한 요소들을 고려해야 한다.
- 특히, 초반에 모든 부분에서 방향을 잘 잡아야 하는데 향후 문제가 발생하였을 경우 전문가를 고용해야 하기 때문이다.
- 잘 쓰여진 doc, 쉽게 따라할 수 있은 예시, 활발한 commnity등을 가진 좋은 솔류션을 사용한다면, 복잡성을 해결하는데 도움을 얻을 수 있다.
7) 보안 (Cheat mitigation)
- 게임의 데이터를 손봐서 이익을 취하는 이른바 '핵쟁이'들이 게임을 망칠 수 있다.
- 따라서 조작할 수 있는 데이터는 게임 플레이어의 개인 컴퓨터가 아닌 제3의 서버에 저장해서 접근을 막는 방법등이 있다.
8) 네트워크 모델의 기능 확장성 (Lock-in)
- 어떤 서버환경이나 네트워크 모델의 경우, 향후 더 나은 기능을 추가하는데 제약이 될 수 있다. (예를들어 보안상 기능)
- 따라서 쉽게 업그레이드가 가능한 솔루션을 찾는 것은 매우 중요하다.
https://unity.com/how-to/multiplayer-game-development-factors
3가지의 흔한 오해
1. 싱글게임을 만들면 언제든 온라인으로 전환 할 수 있다??
- No! 멀티플레이 게임을 만들기 위해서는 기획단계에서 부터 설계가 들어가야 함
- 왜냐하면, 게임 기능 구현시 싱글을 가정하는 것과, 멀티플레이를 가정하는 것에 차이가 크기 때문임 (즉, 싱글 게임에서 멀티게임으로 바꾸려면 거의 모든 스크립트를 다시 만들어야하기 때문)
2. 낮은 네트워크 지연 (low latency) 이 항상 좋다?
- No! 네트워크 컨디션에 따라 다르다.
- 네트워크 컨디션이 좋다면 low latency가 좋을지도 모르지만, 네트워크 컨디션이 안좋다면 high latency가 좋을 수도 있다.
3. 통신료는 무료에 가깝다?
- No! 지역에 따라 달라
- 개인 네트워크와 상업용 네트워크는 다르다. 규모가 크기 때문에 엄청난 돈이 나갈 수 있음
https://blog.unity.com/games/netcode-facts-fiction
끝.
'IT > UNITY(C#)' 카테고리의 다른 글
(C#) Unity유니티_ 바로뒤를 따라다니는 오브젝트 만들기 (지렁이 키우기, 지렁이 꼬리만들기) (0) | 2022.07.27 |
---|---|
(C#) Unity_플레이어를 따라오는 카메라 구현 (2D) (0) | 2022.07.26 |
(C#) UNITY_다른 스크립트에 존재하는 변수, 함수(메서드) 접근하기 (0) | 2022.07.18 |
(C#) UNITY_data저장하고 불러오는 3가지 방법 (0) | 2022.07.18 |
(C#) 비전공자도 이해하는 C#의 자료형식의 구분 방법_reference type, value type, built-in type, cusotom type (0) | 2022.07.15 |
- Total
- Today
- Yesterday
- C#
- 주식투자
- 스타트업
- 사진크롤링
- requests
- 주식
- 크롤링
- 시스템투자
- 머신러닝
- 강화학습
- ET5X
- 가격데이터
- 유니티
- 일자별
- json
- 알고리즘
- 비전공자
- 터틀트레이딩
- It
- 심리학
- Unity
- 프로그래머스
- 랜덤맵
- 경영학
- 파이썬
- beautifulsoup
- 마케팅
- Anet
- IT기초
- PYTHON
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |