어떤 아이디어를 가지고 게임을 개발하다 보면, 점점 아이디어가 바뀌게 되는 경우가 있다. 작은 아이디어들이 종종 바뀌는 건 문제가 아니고 오히려 필요한 부분이지만, 게임의 핵심 알고리즘이나 메커니즘 자체가 바뀌어버리는 경우도 있죠. 이 경우 게임을 더 낫게 만들 수도 있지만, 그동안 만들어 온 수많은 코드나 설정들을 바꿔야 하는 일이 생길 수도 있습니다. 이런 일이 자주 생긴다면 게임개발 가능성에 안 좋은 쪽으로 영향을 줄 수 있습니다. 그래서 우리는 게임개발 도중에 길을 잃지 않기 위해 개발 개발 준비를 확실하게 해야합니다. 이 포스팅에서는 대게 솔로/인디 개발자들이 만드는 중/소규모 프로젝트에 적용할 수 있는 게임 개발 준비방법을 설명합니다. 1. GDD(Game Design Document) 먼저 ..
✨ 이 포스팅에서는 적절한 컬러 조합, 하모니를 만드는 방법을 설명한다. 게임을 개발할 때 적절한 컬러조합을 사용하면 게임 좀 더 재미있어 보이기도 하고, 흔히 말하는 쥬시한 느낌을 내는데도 도움을 준다. 적절한 컬러조합을 사용하는 것은 아래와 같은 효과를 준다. 게임의 핵심 메커니즘에 집중하게 할 수 있다 게임오브젝트의 구분을 명확하게 해준다 현재 집중해야 할 것을 플레이어에게 알려준다 적절한 게임 분위기를 연출한다. 1. 컬러 요소(Color Elements) 컬러 요소는 색을 결정하는 요소들을 말한다. 아래의 사진은 유니티엔진에서의 컬러 선택툴이다. 아래 사진 아랫부분을 보면 알파벳 H, S, V 가 보인다. 이 알파벳들은 각각 H(Hue), S(Saturation), V(Value or Light..
Sprite와 Texture는 둘다 이미지다. 하지만 용도에 차이가 있다. Sprite는 2D 오브젝트에 쓰이며 좌표를 가진다. 좌표를 가진다는 말은 움직일 수도있고 인게임내에서 생성되거나 파괴될수있다. Texture는 오브젝트의 외형을 바꾸기위해 사용된다. 예를 들어 큐브면에 Textrue를 설정할수있다. 하지만 Texture는 오브젝트가 아니다. 따라서 게임중 Texture를 움직일 수는 없다.
이 포스팅에서는 객체지향 프로그래밍 원칙으로 유명한 S.O.L.I.D 원칙을 유니티에 적용하여 이해하기 쉽고 유연하며 유지보수가능한 코드구조를 만드는 방법을 설명합니다. SRP(Single Responsibility Principle): 단일 책임 원칙 클래스를 변경해야 할 이유는 오직 한가지여야 한다. 유니티에 이 원칙을 적용시켜보면, 컴포넌트 단위로 생각해볼 수 있다. 즉, 게임 오브젝트는 한가지 목적을 위해 만들어진 여러개의 컴포넌트의 조합으로 구성되어야한다고 할수 있다. 따라서 Player.cs, Enemy.cs 와 같은 목적을 알 수 없는 컴포넌트가 아니라, PlayerInput.cs, Health.cs, WeaponHandler.cs 와 같은 분명한 목적을 가진 컴포넌트를 작성해야 한다는 뜻이..
아이디어 선택하기 개발을 도중에 포기하지 않고 끝까지 해내기 위해선 만들게임을 잘 선정해야 한다. 내 경험상 이런 게임들은 세 가지 중 하나이다. 내가 만들고 싶은 게임, 만들어졌으면 하는 게임, 내가 잘 만들 수 있는 게임 "내가 만들고 싶은 게임"은 내가 생각했을때 게임 메커니즘이 재미있을 거 같은 게임이다. 흔히 Dream Game이라고도 하는 게임들이다. 이러한 게임들은 결과와는 상관없이 게임을 만드는 과정이 즐거운 게임들이다. "만들어졌으면 하는 게임"은 만드는 과정을 즐겁지 않을지라도 만들어진 결과는 재미있을 것 같은 게임들이다. 예를 들어 GTA, 파이널판타지, 스타크래프트의 세계관이 합쳐진 게임 같은 것들 말이다. "내가 잘 만들 수 있는 게임"은 만드는 과정이 즐겁지 않을 수도 있고 만들..
서론 C/C++ 언어는 힙에 객체를 할당하기 위해 비싼 비용을 치르는 문제를 갖고 있다. C/C++ 기반의 프로그램을 실행하는 C-Runtime은 객체를 담기 위한 메모리를 여러 개의 블록으로 나눈 뒤, 이 블록을 링크드 리스트로 묶어 관리한다. 가령 어떤 객체를 힙에 할당하는 코드가 실행되면, C-Runtime은 메모리 링크드 리스트를 순차적으로 탐색하면서 해당 객체를 담을 수 있을만한 여유가 있는 메모리 블럭을 찾는다. 적절한 크기의 메모리 블록을 만나면 프로그램은 이 메모리 블록을 쪼개서 객체를 할당하고 메모리 블록의 링크드 리스트를 재조정한다. 단순히 메모리 공간에 데이터를 집어넣는 것이 아니라 공간을 “탐색”하고 “분할” 하고 “재조정”하는 오버헤드가 필요하다는 것이다. C#의 CLR은 자동 메..
컴퓨터는 내부적으로 모두 숫자다. 고로 문자도 모두 숫자다. 문자를 숫자에 매칭시키는 여러 규약들이 존재하는데, 이제부터 자주 쓰이는 규약들을 살펴 보자. 아스키(ASCII, American Standard Code for Information Interchange) 아스키는 영어 알파벳과 기호들을 컴퓨터에서 표현하는 규약으로 총 128개의 문자를 1바이트를 이용하여 표현한다. 이름에서 알 수 있듯이 아스키는 영어만 지원한다. 영어권 사람들에겐 상관없겠지만 다른 언어권 사람들은 사용하기 불편하다. (아래의 사이트에서 아스키 테이블을 확인할 수 있다.) ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal ASCII Table ASCII stand..
ref, out 키워드를 사용하면 매개변수를 "참조에 의한 전달(pass by reference)" 을 할수있다. using System; namespace RefReturn { class MainApp { public static void Swap(int a, int b) { int temp = b; b = a; a = temp; } static void Main(string[] args) { int x = 3; int y = 4; Console.WriteLine($"x:{x}, y:{y}"); Swap(x, y); Console.WriteLine($"x:{x}, y:{y}"); } } } 위 코드는 Swap() 함수의 두 매개변수의 교환을 수행하지 못한다. 매개변수도 메소드 외부에서 메소드 내부로 데..