보통 C# 유니티는 순차적인 호출 방식을 택한다. 하지만 순차적인 호출 방법은 그리 효율적인 방법이 아닌 경우가 많다. 따라서 C#, 유니티에서는 이벤트 구동(Event Driven) 방식을 지원하고 있다. 이벤트란 특정한 조건을 만족하면 자동으로 알려주는 메세지(Notification)을 의미한다. 예를 들어, 게임에서 주인공 캐릭터가 사망했을 때 "주인공 캐릭터가 죽었다"고 알리는 이벤트를 생성하면 이러한 상황이 발생했을 때 시스템에서 자동으로 이를 통보(Notification)하고, 이 이벤트에 연결된 모든 적 캐리겉에서 정해진 동작을 수행하는 방식이다. 이러한 이벤트 구동 방식은 for, each구문을 사용해 순차적으로 호출하는 방식보다 메모리 사용 측면이나 구동 속도 측면에서 효율적이다. 델리게..
전체 글
C#, 유니티 게임 개발자4인 멀티플레이 게임에서 플레이어 캐릭터는 총 16명이다. 위 문장을 정확히 이해하고 있다면 네트워크 개념을 잘 이해하고 있는 것입니다. 이해가 잘 되지 않는다면 1번 글 참고! 게임 서버의 종류 기본적으로 네트워크 기반 게임은 대기 중인 서버에 클라이언트들이 참가하는 서버-클라이언트 방식으로 동작한다. 서버: 클라이언트들이 참가할 수 있는 네트워크 공간을 마련하는 컴퓨터, 호스트(host), 게임 속 상호작용 연산 담당. 클라이언트: 서버에 참가하여 게임을 플레이하는 컴퓨터 네트워크 게임의 서버-클라이언트 방식은 대부분 다음과 같은 방식으로 구현된다. 전용 서버(Dedicated Server) 리슨 서버(Listen Server) P2P(Peer - to - Peer) 1. 전용 서버 전용 서버는 서버..
4인 멀티플레이어 게임에서 플레이어 캐릭터는 총 16명이다 게임 서버를 공부한 사람이라면, 이 문장을 이해할 수 있어야 한다. 각 클라이언트의 게임 월드는 네트워크상에서 평행우주처럼 동작한다. 클라이언트: 서버에 접속하여 서비스를 제공받는 단말기(컴퓨터), 프로그램, 사용자를 뜻함. 다음은 4인 멀티플레이어 게임에서 각 클라이언트의 게임 월드 모습을 그린 그림이다. 그림에서 네트워크에 존재하는 게임 월드는 총 4개이다. 위 그림에서 게임 월드 속의 a, b, c, d는 플레이어 캐릭터로 동작하는 게임 오브젝트입니다. 여기서 플레이어 A가 직접 조작하는 플레이어 캐릭터는 a라고 가정해 본다면, A의 컴퓨터, 즉 클라이언트 A에서 동작하는 게임 월드에는 a, b, c, d라는 4명의 플레이어 캐릭터가 존재한..
빠른 알고리즘은 느린 알고리즘보다 우수하다! 하지만... 빠름과 느림의 종류는 굉장히 다양하다. 알고리즘의 스피드를 어떻게 전문으로, CS적으로 표현하면 좋을까? 두 가지 알고리즘을 비교하는 방법? A가 B보다 "조금", "많이" 빨라요 -> 애매모호함. 어떤 환경에서는 a가 빠르고, 어떤 환경에서는 b가 빠르다면 애매하고 무의미해짐. 즉 시간으로 표현해서는 안됨. ex) 내 컴퓨터는 최신 컴퓨터라 너의 컴퓨터에서보다 알고리즘 실행이 빠르다. 입력이 적은 구간과 많은 구간 사이에서 성능 차이가 확연히 나는 경우도 있음 ex) 출퇴근 할 때 지하철이 빠른가 버스가 빠른가? 회사가 가까울 경우 버스가, 거리가 멀 수록 지하철이 좋은 선택이 되는 경우와도 같음. 두 가지 경우가 강점을 보이는 경우가 다른 상황..
1. Mathf.Min(float a, float b) a 와 b 중에 더 작은 값을 반환합니다. 2. Mathf.Max(float a, float b) a 와 b 중에 더 큰 값을 반환합니다. 3. Mathf.Clamp(float a, float min, float max) a 가 min 보다 작다면 min 값을, max보다 크다면 max 값을, 사이값이라면 그 값을 반환합니다. 4. Mathf.Abs(float a) a 의 절댓값을 반환합니다. 5. Mathf.Lerp(float a, float b, float t) a 와 b 사이를 보간 합니다. t는 0~1 사이의 값을 넣을 수 있으며 퍼센트게이지라고 생각하시면 됩니다. 예를 들어 t에 0.5f 를 입력하면 a와 b 의 거리비율 중 절반에 해당하는..
대리자(delegate)란? C#에서 delegate(대리자)는 메서드를 대신 호출해지는 기법으로 '대신 실행해주는 사람'이라는 사전적 정의와 유사하다. delegate를 선언하기 위해서 delegate 키워드를 사용한다. 한정자 delegate 반환타입 대리자이름 (매개변수목록) delegate는 메서드의 주소를 참조하고 있어서 메서드를 대신 호출할 수 있는데, C/C++의 참조 포인터와 유사하지만, 데이터 타입을 안전하게 처리한다는 장점이 있다. 델리게이트를 사용하는 경우 1. 함수를 변수에 담고 싶을 때 델리게이트를 사용할 수 있다. using System; using System.Collections.Generic; using System.Linq; using System.Text; using S..
벡터의 for loop 일반적으로 for loop문을 돌리는 방법에는 3가지가 있다. 1. Index 2. Iterator 3. Ranged based for loop (C++ 11) 이 세가지 방법 중에서 Iterator와 Ranged based for loop는 비슷한 구조로 돌아간다. 결론부터 말하면 ranged based for loop이 가장 안전하고 표준의 방법이다. 하지만 for loop 안에서 Index 정보가 필요하다면 Index를 사용한 for loop문을 사용해야 하는 경우도 있다. 예제 "how many elements?" 가 출력된 후에 입력을 받고, 입력을 받으면 입력된 수 n 개의 숫자 1이 들어가 있는 벡터를 만들어 주었다. 각 elelment에 2를 곱해주는 Index 베이..