한달간의 감상평 : 이직 이후 2개월이 지났다. 시간이 어떻게 지나갔는지도 모른채 게임만 만들었더니 이제 어느정도 감이 생기는 것 같다. 일에 집중한 만큼 자기계발에 소홀해졌다. 줄어든 근육량이 어느정도 말해준다. Programming 새로운 미니게임 개발 1 - feat. 무한의 계단(완료) 처음으로 락스텝 동기화 방법을 사용한 미니게임 개발. 무한의 계단을 모티브로 한 멀티플레이 미니게임 게임의 로직을 먼저 짜고 동기화를 고려하였더니, 골치가 더 아팠다. 락스텝을 짜기 위해선 패킷 전송 데이터를 줄이거나, 함수형 프로그램을 더욱 잘짜도록 해야겠다. 새로운 미니게임 개발 2 - feat. 메탈기어 솔리드 (진행중) Rpc와 서버/클라이언트(owner) 영역을 나눠서 개발을 진행. 점점 멀티플레이 게임 ..
UML 프로그램 구조를 나타내기 편하게 해준다. 주로 클래스 다이어 그램으로 프로그램 구조를 생각하려 했는 데, 전제 프로세스를 생각하려면 uml도 고려하는 게 좋다는 것을 다시금 깨닫게 된다. 시퀀스 다이어그램 & 액티비티 다이어그램 시퀀스 다이어그램 : 객체 간 메시징 흐름을 일목요연하게 표현 액티비티 다이어그램 : 자세하게 프로그램의 실행 방식을 그림으로 묘사 게임 플레이 네트워킹 이 책에서는 3가지로 크게 나타내고 있는 데, 서버에서 모든것을 처리 하기, 클라이언트에서 렌더링하기, 추측항법(prediction) 사용하기 이렇게 있다. 기대했던 부분인 만큼 설명 부족하여 조금 실망인 파트였다.. 모든 역할을 서버에서 하기 가장 고전적인 방식이다. 클라이언트에선 입/출력만 담당하면 되고, 서버에서 로..
유니티로 시야각 구현 using System.Collections; using System.Collections.Generic; using UnityEngine; public class FovTest : MonoBehaviour { public struct ViewCastInfo { public bool hit; public Vector3 point; public float dst; public float angle; public ViewCastInfo(bool _hit, Vector3 _point, float _dst, float _angle) { hit = _hit; point = _point; dst = _dst; angle = _angle; } } public struct Edge { public..
온라인 게임에서 게임 서버 컴퓨터 네트워크 어딘가에 서버 프로그램이 실행된 상태로 있으면, 여러 사람이 그 서버에 접속해서 게임을 즐긴다.게임 서버를 게임 플레이어가 자유롭게 가져다 실행하는 것도 가능했지만, 일부 게임은 일반 대중에게 공개되지 않고 게임 사업자만 독점적으로 게임 서버를 실행해 놓기도 했다. 지금 온라인 게임은 사실 이러한 형태이다. 서버의 역할 싱글 플레이에서는 모든 입출력과 연산 처리가 컴퓨터 한 대 안에서 일어난다. 따라서 컴퓨터 네트워크 자체가 쓰일 일이 없다. 그러나 온라인 게임에서는 플레이어 한 명 이상이 게임을 즐기기 때문에 플레이어 세 명 이상이 한 공간에 있다면, 컴퓨터 네트워크를 통해 상대방 모습이 생생하게 전달되어야 한다. 대부분 온라인 게임에서는 클라이언트에서 게임 ..
네트워크에서 데이터를 주고 받을 때 소켓을 사용한다. 게임 프로그래밍에서 데이터를 주고 받는 방식의 차이가 있다. TCP로 통신하는 경우 클라이언트 개수만큼 소켓이 있어야 하므로 게임 서버에서 다루어야 하는 소켓 개수가 많다. 파일 핸들을 하는 동안 스레드가 대기하는 일이 없어야 한다. 이러한 특징으로 네트워크 프로그래밍에서 소켓은 보통 비동기 입출력 상태로 다룬다. 비동기 입출력 방식에는 크게논 블로킹 소켓 방식과Overlapped I/O 방식이 있다. 그리고 이 방식을 진보시킨 epoll과 IOCP(I/O Completion Port) 방식이 많이 활용된다 블로킹 소켓 디바이스에 처리 요청을 걸어 놓고 응답을 대기하는 함수를 호출할 때 스레드에서 발생하는 대기 현상을 블로킹이라 한다. 소켓뿐만 아니라..
네트워크 구성 기기 단말기와 네트워크 기기로 구분된다. 단말기는 쉽게 생각해서 pc와 핸드폰 같은 통신 기기(클라이언트 or 서버)인데, 이를 하나의 노드라고 생각해보자. 네트워크 기기는 네트워크 스위치라는 것으로 다른 단말기들 사이를 연결해주는 다리 역할이다. 주로 이런 그림(LAN)이 하나의 단위라고 생각하자. 이런 그림이 여러개가 연결되어 있는 것을 광역망(WAN)이라 하고, 현재 우리의 네트워크 망은 저위의 그림 단위 하나하나가 복잡한 그림으로 연결되어 있는 형태(인터넷)이다. 마치, 하나의 분자구조가 얽히고 섥혀 하나의 세포를 구성하는 것 처럼 말이다. OSI모델 컴퓨터 네트워크 통신에 대한 국제 표준. 이 표준만 잘 지키면 어떤 기기든, 어떤 형태의 통신 선로를 사용하든 컴퓨터 간 통신을 할 ..
멀티 플레이어 게임을 개발을 하고 있다보니, 단순 게임의 로직을 개발을 하는 것으로는 부족하다는 것을 알았다. 일전에, 화상채팅으로 커리어 상담을 받았을 때, 단순 게임로직 개발은 당연히 할 줄 알아야 하고, 더 나아가서 본인의 강점을 키워야 한다고 했던게 생각이 났다. 그래서 이왕 해야하는 김에 네트워크와 서버에 관해서 강점을 키우고자 마음을 먹게 되었다. 어려운 만큼 돌아오는 것이 크리라 생각이 된다. 프로그램과 프로세스 프로그램은 디스크 메모리에 저장되어 있는 명령어와 데이터 덩어리이다. 이자체로는 무엇도 하지 않고, 단순히 메모리에 눌러 앉아 있는 것이다. 더블클릭을 하는 순간, 이 명령어와 데이터 덩어리가, ram 메모리에 로딩이 되며, 하나의 프로세스를 생성하며 명령어들이 돌아가게 된다. (프..
Lockstep 동기화 기법은 멀티플레이어 게임에서 사용되는 동기화 방식 중 하나이다. 완전히 동일한 로직을 바탕으로 매 프레임마다 모든 플레이어의 입력값을 동기화하고 각자 동일한 시뮬레이션을 진행한다. 많은 캐릭터와 복잡한 로직을 간단하게 동기화할 수 있다. 입력 조작과 프레임 진행만 동기화하면 게임 로직이 동기화된 상태로 진행된다. 결정론적으로 로직을 작성하는 것이 매우 어렵다. 특히 부동소수점의 처리는 하드웨어마다 매우 다르고, 옵션을 통해서 일치시키면 성능이 대폭 떨어지는 경우가 많다. 10명이하의 플레이어 게임에 사용한다. 참가자 수가 늘어날 수록 입력 패킷 도달 지연이 발생할 가능성이 크게 높아지기 때문이다. 현재 내가 개발하고 있는 게임에서 플레이어의 인풋을 히스토리 (인풋값의 리스트)를 만..