요즘 블로그 포스팅을 많이 못했는데 그 동안 게임 잼을 참가했다. 사실 그 전에 포스팅할 여유는 있었지만 주제도 딱히 없었거니와 3일 내내 작업해야하니 그 전에 번아웃 되지 않도록 어느정도 쉬엄쉬엄했었다. 이번이 첫 게임잼 참가였는데, 생각보다 결과물이 만족스러워서 기쁘다. 개발하면서 부딪혔던 타일맵 관련 내용은 이 글에 서술했다. 다른 어려움도 있긴 했지만, 이 프로젝트에 국한되는 문제라고 생각해서 따로 작성하지는 않을 예정이다. 게임 잼은 기획1, 프로그래밍 2, 아트 4로 팀을 이뤄 진행했다. GitHub - virtus2/gmtkGameJam: Game Maker's Toolkit 게임잼 2022 출품작Game Maker's Toolkit 게임잼 2022 출품작 . Contribute to vir..
게임 개발
타일형 게임을 구현할 때 유니티에서 제공하는 타일맵을 사용하면 팔레트를 이용해 쉽게 타일을 배치 할 수 있다는 장점이 있다. 단순히 타일을 배치하는 것만으로 충분할 수도 있지만, 구현하려는 게임에 따라 각 타일에 데이터를 저장 해야 할 때가 있다. 어떻게 해야할까? 먼저 타일맵부터 설명하고 그 이후 구현 방법을 서술하겠다. 타일맵에서 특정 좌표의 타일 얻기(또는 셀 좌표 얻기) 타일맵은 그리드 형태로 되어있으며 각 타일(셀)의 좌표는 다음과 같이 얻을 수 있다. Tilemap tilemap; // 타일맵 (GetComponent로 얻거나 인스펙터에서 할당해줬다고 가정) Vector3 localPos; // 로컬 포지션 Vector3 worldPos; // 월드 포지션 Vector3Int worldToCe..
의도 컬렉션에 들어 있는 객체별로 한 프레임 단위의 작업을 진행하라고 알려줘서 전체를 시뮬레이션한다. 쉽게 말하자면 게임에 존재하는 객체들의 동작이나 상태를 한 프레임씩 업데이트 하는 것이다. 동기 던전을 지키는 해골 전사가 있고 이 전사가 문 주위를 순찰한다고 해보자. 해골 전사를 왔다갔다하는 코드를 가장 간단하게 만든다면 다음과 같을 것이다. while(true) { // 오른쪽으로 간다. for(double x = 0; x 0; x--) skeleton.setX(x); } 하지만 이 코드는 무한루프가 있어서 해골 전사가 순찰도는 걸 플레이어는 볼 수 없다는 문제가 있다. 우리가 원하..
의도 게임 시간 진행을 유저 입력, 프로세서 속도와 디커플링 한다. 동기 대화형 프로그램 게임 루프에 대해서 살펴보기 전에, 과거에는 프로그램이 배치 모드로 동작했다. 코드를 입력해 넣은 뒤 한참 뒤에 결과를 볼 수 있었다. 즉각적인 피드백을 원했던 프로그래머들은 대화형 프로그램(interactive)을 만들었다. 초기 대화형 프로그램 중에선 게임도 있었다. 예를 들면 다음과 같은 텍스트 어드벤처 게임이다. 당신은 던전 안에서 해골 전사와 마주쳤다. 해골 전사는 뼈 부딪히는 소리를 내며 당신에게 다가오고 있다. > 공격한다 당신은 해골 전사를 공격해 산산조각 냈다! 경험치 10 획득 이제 프로그램과 실시간으로 대화를 나눌 수 있게 되었다. 프로그램은 입력을 기다렸다가 응답한다. 코드로 표현하면 다음과 같..