728x90
반응형

Game Development, 게임개발 182

Prototype Pattern, 프로토타입 패턴 [디자인패턴]

프로토타입이란 가장 초기 버전을 말하는 듯한 느낌을 준다. 실제로도 프로토 타입이라는 말은 개발 중에 필요한 기능만 넣어서 대충 구동해보는 것을 말한다. 그렇다면 디자인 패턴에서의 프로토타입은 무엇을 말하는 것인지 알아보자 플레이어와 몬스터가 싸우는 게임이 있다고 하자. 몬스터는 플레이어를 공격하기 위해 떼를 지어다니고 그 몬스터들은 Spawner를 통해 게임 스테이지에 등장하고 몬스터의 종류마다 Spawner가 존재한다. 예제 코드로 각종 몬스터 클래스를 만들어보자 class Monster{ //... }; class Ghost : public Monster{}; class Demon : public Monster{}; class Sorcerer : public Monster{}; 한 종류 당 하나의 ..

Observer Pattern, 관찰자, 감시자 패턴 [디자인패턴]

이번에는 관찰자 패턴이다. GoF의 디자인 패턴이 말한다. 객체 사이에 일 대 다의 의존관계를 정의해두어 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업데이트될 수 있게 만든다. 쉽게 말하면 전국에서 복권 당첨 방송을 보고 당첨된 사람만 소리지르듯이.. 어떠한 이벤트 발생에 대해 다수의 객체가 반응할 수 있게 하는 것이다. 알아보자 모델-뷰-컨트롤러, MVC 구조를 쓰는 프로그램이 엄청나게 많다. 특히 안드로이드 스튜디오를 활용하여 무엇인가 만들어봤다면 맨날 봤다. 하지만 그 기반에는 관찰자 패턴이 존재한다. ** 자바에서는 java.util.Observer, C#에서는 event 키워드로 지원을 해준다. 관찰자 패턴은 GoF 중에서도 가장 널리 사용..

TCP,UDP 소켓프로그래밍, C# - 소켓 생성부터 종료까지

게임 네트워크를 알아보는데 직접 해보는 것만큼 도움되는 것이 없다. 소켓 프로그래밍을 해보자. 우선 소켓이란 TCP와 UDP를 간단하게 다루기 위한 통신 API이다. IP 주소와 포트 번호를 같이 묶어서 상대를 지정하고 통신하는 것이다. 통신 상대로는 네트워크로 연결된 단말이나 같은 단말 내의 어플리케이션이 가능하다. **같은 네트워크 안에 있는 다른 컴퓨터나 컴퓨터 안에서의 프로세스라고 하면 되겠다. 네트워크로 연결된 단말을 지정하여 통신하려면 어느 단말의 어플리케이션과 통신할 것인지 정해야 한다. 실제로 통신할 때는 물리적으로 케이블을 포트에 연결하여 단말끼리 접속한다. 소켓은 말 그대로 어플리케이션에 가상으로 존재하는 이더넷 포트를 말한다. 소켓으로 통신할 때는 소켓이 지정한 포트에 전용 이더넷 포..

온라인 게임에서 TCP 보다 UDP를 사용하는 이유

[컴퓨터(Computer Science)/네트워크, Network] - TCP vs UDP 비교 우선 TCP와 UDP는 위와 같다. 생각해보면 UDP는 속도만 빠르지 제대로 데이터가 전달되는지도 몰라서 온라인 게임에선 정확한게 중요하지 않을까? 생각하면서 TCP가 적용된다고 생각하는 사람이 많다. 그러나 현업에선 오히려 UDP가 더 많이 쓰인다고 한다. 왜 정확한 것보다 빠른 것을 쓰는 것일까? TCP의 특징 중 하나인 데이터를 주고 받을 때 순서와 전송을 보장하는 특성이 오히려 온라인 게임에서 방해가 된다는 이유 때문이다. 전달을 보증하는 TCP는 송신한 세그먼트가 유실되었다고 판단하면 재전송을 한다. 도대체 이것이 무엇을 방해하는 것일까? 일반적으로 TCP는 세그먼트 송신후 재전송 타임아웃(RTO) ..

Flyweight Pattern, 경량 패턴 [디자인패턴]

우리는 게임을 만들 때 반복작업을 하는 경우가 많다. 웬만해서는 거의 반복작업 위주다. 그렇다면 반복작업하는 시간을 줄이거나 반복 작업을 효율적으로 할 수 있다면 전체 프로젝트의 효율도 꽤나 올라갈 것이라고 생각된다. 반복된 데이터에 대해서 하드웨어의 부담을 줄여주는 패턴이 있다. 경량 패턴이다. 알아보자 우선 게임의 배경을 생각해보자 나는 항상 중세 판타지 게임이 먼저 생각난다. 기사, 괴물, 마녀, 용 등이 있다. 내가 좋아하는 게임 중 하나인 위쳐 또한 그렇다. 저기 배경이 보이는가 무엇보다 수많은 나무가 배경을 채우고 있다. 멀리서 보기엔 다 비슷비슷해보인다. 프레임마다 저 모든 나무를 구현하는 것이야 어렵진 않겠지만.. 너무 비효율적이라고 생각이 든다. 과연 모두 일일이 렌더링을 해야하는가? 물..

게임네트워크를 따로 생각해야하는 이유

우리는 네트워크를 배워봤다. 또한 네트워크 지식을 알고 있다. 하지만 우리는 그 지식이 도움은 되겠지만 직접적으로 게임에서 일어나는 통신에 대해서 40% 정도 밖에 도움이 되지 않는다. 그것은 뭐 때문일까? 온라인 게임을 만들 때 고도의 기술력이 필요하다고 생각할 수 있다. 하지만 이미 우리가 배웠던 것으로도 충분히 구현할 수 있다고 한다. 하지만 앞서 말했듯이 왜 우리가 배웠던 것은 40% 정도밖에 도움되지 않는 것일까? 기본적인 통신은 정보를 보내고, 받고, 그 정보를 반영하면 된다. 즉, 게임에서 일어나는 통신은 간단하다. 다만 중요한 것은 언제 보내며, 어느 빈도로 보낼 것이며, 뭘 어떻게 보낼 것인가.. 라는 구체적인 문제가 생긴다. 떄문에 우리가 아무리 네트워크 지식이 뛰어나더라도 게임에 대한..

Command Pattern, 명령 패턴 [디자인패턴]

요약 요청 자체를 캡슐화 하는 것으로 서로 다른 클라이언트를 매개변수로 만들고 요청을 대기시키거나 로깅하고 되돌릴 수 있는 연산을 지원하도록 함. ???? 요약인데 알 수 없는 말이다. 요약을 한답시고 했는데 솔직히 디자인패턴을 처음 본 사람의 입장으로 전혀 와닿지 않는 설명이다. 로버트가 표현하길 명령 패턴은 "메서드 호출을 실체화하는 것"이라고 했다. 실체화라는 말은 어떠한 것을 변수에 저장하거나 함수에 전달할 수 있도록 데이터로 만든다. 즉, 메서드를 객체로 바꿀 수 있다는 것을 뜻한다. 그렇다면 메서드 호출을 객체로 만들었다는 이야기다. 예를 들며 살펴보자 게임의 입력을 생각해보자. 우리는 오락실에서 (나는 오락실 세대다) 메탈슬러그에는 기본적으로 A,B,C가 있다. 차례대로 공격, 점프, 수류탄..

디자인 패턴을 만들어내는 이유

디자인 패턴을 만들어낸 이유에는 소프트웨어공학의 정신이 깃들어있다. [컴퓨터(Computer Science)/소프트웨어공학(Software engineering)] - 소프트웨어공학(1) 필요성과 특징 알아보자 소프트웨어 구조가 잡혀있어야 좋은 프로그램이 나온다고 한다. 그러한 소프트웨어 구조를 짜는 법은 도대체 어디서 배우는 것일까? 소프트웨어 공학에서 보았듯이 구조는 변경할 수 있느냐가 제일 중요한 핵심이다. 코드를 고치기 위해서는 기존 코드를 이해해야 한다. 어떠한 프로젝트에 중간에 투입되었을 때, 신입 사원이 되었을 때, 가장 오래 걸리는 부분이라고 한다. 머리로 코드에 대한 전체적인 그림을 그릴 수 있다면 해결책을 쉽게 찾을 수 있다. 그렇다면 어떻게 코드를 구성해야 누구든지 시간이 조금만 걸리..

디자인 패턴은 꼭 필요한가?

우선 디자인 패턴을 배우기 전에 인지하고 지나가야할 부분 중 하나다. 과연 디자인 패턴이 쓸모가 있는가? 우리는 디자인 패턴이 없으면 잘할 수 없는가? 위와 같은 질문에 대해 대답할 수 있어야할 것이다. 그렇지 않고서 배우는 것은 수동적인 배움에 불과할 것이다. 알아보자 디자인 패턴 중 디자인도 알고 패턴도 아는 단어다. 디자인은 어떠한 틀을 말하는 것 같고 패턴은 어떤 정해진 양식을 말하는 것 같다. 맞다. 디자인 패턴은 오랫동안 쓰여저 굳어진 어떠한 우리의 정보 표현 단위다. **여기서 정보 표현이란 프로그래밍하는 방식이라고 생각하면 되겠다. 즉, 우리가 패턴을 배운다면 앞선 세대들도 알고 뒷 세대들까지 굳어져서 어떠한 것인지 알게 된다는 말이다. 우리가 곱셈공식을 알게 되듯이 말이다. (a+b)^2..

게임수학 - 동차좌표계, Homogeneous coordinates **

//21.12.22 업데이트 좌표계도 많은데 동차 좌표계라는 새로운 것이 튀어나왔다. 무엇인지 알아보자 사실 근본적인 정의보다 우리가 어떻게 이해해야하고 왜 이렇게 사용하는지를 중점에 두고 알아보자 3차원의 좌표는 (x,y,z) 3가지 성분으로 표현된다. 하지만 동차좌표에서는 여기에 무한원점이라는 개념을 추가시킨다. -> 무한원점의 개념이 어려우면 아래와 같이 이해하자 -> 사실 4차원의 성분이 0이면 벡터, 1이면 점이라고 설명하는 경우도 많다.(대부분) (이 말은 3개의 성분가지고는 벡터인지 점인지 알 수 없지만 4번째 차원의 정보로 구분하겠다는 말이다.) ??? 근데 굳이 벡터인지 점인지 구분해야하나???? 이는 방향파악과 변환에 중요하기 때문인데..? ** 방향과 이동변환, 투영변환을 용이하게 하..

728x90
반응형