본문 바로가기

게임 개발

(21)
로컬라이징(국가에 따른 언어)을 위한 DB 작성 개요요즘 게임들은 대부분 전세계에 판매하기 위해 다양한 언어를 지원한다. 그렇다면 게임을 만들 때 각 국가에 맞게 한 단어에 여러 국가의 언어가 필요하다.그럴 때마다 게임의 String 데이터들을 일일이 다 바꾸는 것이 아니라 게임 속 String 데이터에는 어떤 데이터가 들어가야할지 명시만하고, 실제로 들어가야하 할 데이터는 게임 데이터 파일로 관리하는 것이다. 이러한 이유는 유지보수(관리)가 편리하며, 타 국가의 언어로 번역 시 외주를 맡겨야할텐데,해당 경우에 내부 데이터와 분리하여게임 데이터를 안전하게 보호할 수 있다. DB 작성먼저, [REDACTED] 라는 게임의 메인 화면을 가져와보았다.필자는 이 게임의 내부 구조를 알 수 없기 때문에 간단하게 해당 UI의 String 데이터를 임시로 할당하였..
기획에서의 DB와 서버의 DB 평소와 같이 게임 DB를 만들고 있었는데, 문득 이런 생각이 들었다. 지금 작성하고 있는 DB도 Database인데, 그러면 서버의 DB에 적용되는 규칙인 데이터 정규화 규칙이 똑같이 적용되어야하나?   데이터 정규화(Normalization)는 간단히 말하자면 DB의 이상 현상을 방지하고 중복을 최소화하며, 데이터의 일관성과 무결성을 유지하기 위해 여러 정규형(NF, Normal Form) 단계로 분해하는 과정이다. 아래와 같이 데이터가 있다고 가정해보자.이름좋아하는 것다니는 학교학교 위치김OO축구A고등학교서울이OO책 읽기B대학교대구박OO운동C중학교춘천 여기서 사람들의 다니는 학교를 확인하고 싶을 때는 바로 확인할 수 있지만 학교 위치는 굳이 확인하지 않아도 된다.그렇기 때문에 다니는 학교와 위치는 따..
환경음 - Atmosphere와 Ambience 사운드 디자인에서는 상황에 적절한 사운드를 넣는 것이 제일 중요하지만, 그 상황 전체를 풍족하게 채우기 위해서는 환경음이 필수적이다. 예를 들어 당신이 공사장에서 총 싸움을 하는 상황을 사운드 디자인 한다고 가정해보자. 먼저 총을 격발하는 소리와, 발걸음, 말 소리 등이 주요 이벤트일 것이며 우선적으로 디자인 될 것이다. 그러면 이렇게 해서 끝일까?당연히 아니다. 그 환경에 맞는 사운드가 들어가야한다. 만약 공사장이 밀폐되어 있다면 웅웅 울리는 소리가 들릴 수도 있고, 아예 공사장 밖의 환경까지 고려해서 탱크가 움직이는 소리나 바람이 불어 귀를 스치는 소리, 철이 삐그덕 거리는 소리가 들릴 수도 있다. 이러한 환경음을 Atmosphere와 Ambience로 분류한다. 그럼 두 개의 차이점은 무엇일까?Am..
사운드 에셋 사이트 추천 게임을 제작하다보면 사운드 에셋이 많이 필요하지만 arlist.io같은 사이트의 경우엔 하나의 bundle로 사운드를 제공하지 않고 하나하나 낱개로 제공하기 때문에 찾아보기 번거롭다.이번 글에서 소개할 사이트에서는 게임 개발에 필요한 에셋을 zip파일로 번들로 제공한다.https://sonniss.com/gameaudiogdc 위 링크에 접속하면 일단 검은색 화면이 보일텐데, 당황하지 않고 휠을 사용해 아래로 내린다.이 사이트는 특이하게 세로로 긴 형태를 하고 있어서 아래로 내려야 내용이 보인다. 이렇게 아래로 내리면 ~~.zip 이 보일텐데 연도에 따라 에셋을 제공하고 있다.하지만 하나의 zip파일로는 너무 용량이 크기 때문에 위와 같이 ~~Par1of5.zip , ~~Par2of5.zip 과 같이 여..
Dungeon Scrawl - 레벨 디자인 툴 게임에 따라 성격은 다르겠지만 던전의 경우 각 층에 따라 여러 방이 존재하고 그 안에 보스나 보상 등이 존재한다.이것들을 모두 파워포인트나 엑셀로 만들순 있지만 이번 글에서는 이 작업을 조금 더 편하게 할 수 있는 툴을 소개하겠다. https://www.dungeonscrawl.com/ Dungeon Scrawl | Old-School Maps in MinutesFree online mapmaking tool for tabletop rpgs like Dungeons & Dragons - no sign up required. Create battlemaps with ease, export as an image or PDF, use them in rpg adventures!www.dungeonscrawl.c..
엑셀 데이터 JSON으로 변환 먼저 엑셀에 들어간 후 파일을 열거나 생성하기 전 아래 사진의 '옵션'에 들어간다.그 후, '리본 사용자 지정' -> '개발도구' 클릭으로 활성화를 시킨다. 예시를 위해 간단하게 DB를 작성하였다. 다 작성된 엑셀 파일이 있으면 '다른 이름으로 저장' 을 클릭하고 'CSV UTF-8(쉼표로 분리)' 를 통해 CSV 파일로 저장이 가능하다. 그 후 CSV 파일을 JSON으로 변환하는 과정을 거치면 된다.이렇게 불편하게 진행하는 이유는 Excel에 한번에 JSON으로 내보내주는 기능이 없기 때문이다. CSV파일을 JSON으로 변환하는 것은 간단하다. 그냥 인터넷에 'CSV 2 JSON'으로 검색하면 아무 사이트나 뜰텐데, 여기서 기능을 이용해서 JSON으로 변환하면 된다.
Unity 코드 기본 템플릿 변경 Unity를 설치 후 C# Script를 생성하면 기본적으로 Unity에서 제공하는 Script 템플릿이 존재한다.필자의 경우엔 Start()와 Update() 함수를 제공 후 그 위에 주석으로 각 함수의 기본적인 역할을 정리해 둔 간단한 템플릿이었다.하지만 매번 해당 주석을 지우고 코드를 작성하려다보니 매번 귀찮았다.이번 글에서는 해당 방법을 건너뛰고 자신만의 템플릿으로 수정할 것이다.먼저 자신의 Unity Editor가 설치돼 있는 경로로 이동한다. 필자의 경우엔 D드라이브에 설치되어 있으므로D:\Unity Editor\2022.3.30f1\가 Editor의 경로이다. 그 후 해당 경로에서 \Data\Resources\ScriptTemplates로 이동하면 아래와 같이 텍스트파일이 존재한다.여기서 설..
Time.deltaTime 유니티에서 플레이어를 조작하기 위해 가장 기본적인 코드 중 하나인 움직임과 관련된 코드에서 Time.deltaTime을 사용하는 것을 알 수 있다.이때 Time.deltaTime은 어떤 역할을 하기에 움직임을 부드럽게 만드는 것일까? void Update(){ if (Input.GetKey(KeyCode.W)) transform.position += Vector3.forward * Time.deltaTime * speed; if (Input.GetKey(KeyCode.A)) transform.position += Vector3.back * Time.deltaTime * speed; if (Input.GetKey(KeyCode.S)) transf..