목록Unity (7)
기억 저장소

Gravity Lab은 2017년 넥슨 GT 동아리 교류전(숭실대, 아주대)에서 발표한 개인 프로젝트이다. 아래는 발표시 사용한 시연 영상이다. 이 게임의 핵심 기능은 바로 표면에 착지하여 서는 기능인데, 이를 어떻게 구현하였는지 설명하고자 한다. . . 가장 우선, 이 기능을 구현하기 위한 기본 전제로 착지할 표면의 법선벡터 (normal vector)를 알아야 한다. 예를들어 위와 같이 두개의 표면이 있고, 플레이어가 왼쪽의 표면에 서 있는 상태에서 아래와 같이 오른쪽의 기울어진 표면으로 이동한다 하였을 때, 플레이어가 표면 위에 똑바로 서기 위해서는 해당 표면의 normal 벡터를 구하여 플레이어의 up 방향이 되게 해야 한다. 다행히도 Unity에서는 Ray casting을 통해 얻어낸 표면의 n..

컴퓨트 셰이더는 일반 셰이더와 목적을 달리한다. vertex shader 또는 pixel shader와 같이 렌더링 파이프라인의 특정 과정중에 속하는 셰이더가 아닌, GPU를 범용적으로 활용하여 특정 계산을 병렬 수행하는데에 특화된 셰이더이다. 그렇다면 구체적으로 병렬 연산이라 함은 어떤 것인가? int sizeX = 10000, int sizeY = 10000, int sizeZ = 10000; float[,,] arr = new float[sizeX, sizeY, sizeZ]; for(int i = 0; i < sizeX; i++) for(int j = 0; j < sizeY; j++) for(int k = 0; k < sizeZ; k++) { arr[i, j, k] = (i + j) * 1.0f /..

Volume Rendering을 최적화 하는 방법 중 하나로 Octree가 있다. Octree란, 말로 풀어서 설명하면 8진트리, 즉 노드당 8개의 자식을 갖는 트리를 말한다. 이 데이터 구조는 3차원으로 구성된 Volume Data를 저장하는 역할을 하는데, 렌더링 시간을 효율적으로 절감시켜준다. . . . 설명을 위해 쿼드 트리로 예시를 들어보겠다. Ray Origin의 위치에서 Ray를 그림에 보이는 방향으로 진행시킨다고 할 때, Ray가 어떤 물체에 부딛힐 지, 아무 물체에도 부딛히지 않을지 판단하기 위해서는 계속 조금씩 Ray를 진행시키며 현재 검사하는 위치에 물체가 존재하는지 판단해야 한다. 이 때 가장 간단한 방법은, 일정한 간격으로 Ray를 진행시키는 것이다. 하지만, 위와 같이 물체의 거..

1. 각 건반을 누를 때 소리 출력하기 -> 각 건반 게임오브젝트마다 이벤트 트리거 컴포넌트를 추가하여 이벤트 등록을 해 놓았다. 이벤트 동작으로는 AudioSource를 Play() 하게 만들었다. 그러나 AudioSource가 하나만 있으면 여러 건반을 누를 시에 결국 마지막에 누른 건반의 소리만 출력이 되는 문제가 있다. 2. 다중 입력 시 소리 처리하는 방법 AudioSource.PlayOneShot() 함수를 사용하면 해결 될 문제이지만, 이후 진행될 여러 과정의 이유로 AudioSource 객체 여러개를 큐 형태로 저장하여 가장 오래된 AudioSource를 가져와 재생 후 다시 큐의 뒷부분에 추가하는 형식으로 하였다. 3. pitch 악기의 전반적인 음역대를 조절하는기능을 구현하기 위해 pi..

시퀀서를 표현하기 위해 횡방향으로 스크롤 가능한 UI를 만들기 위해 ScrollView를 사용하였는데, 악보가 길어질수록 프레임 드랍이 발생하였다. Unity에서 제공하는 ScrollView는 요소마다 GameObject를 생성하고 mask를 이용하여 View 영역 이외 부분을 가린다. 그런데 Stats을 활성화 하면 Tris와 Verts의 개수가 Mask로 가려진 영역까지 포함하는 것을 알 수 있다. 이로 인해 요소가 많아질수록 렌더링 해야 하는 Tris 수가 늘어나 프레임 드랍이 발생하는 것이 원인이었다. . . . GitHub의 한 리포지토리를 통해 해결법을 찾게 되었다. https://github.com/tsubaki/Unity_UI_Samples 원리는 화면상에 보이게 될 박스는 개수가 한정되어..

초반에는 위와 같이 모든 텍스트를 영어로 작성하였지만, 앱 사용자들로부터 다국어 지원에 대한 피드백을 받게 되어 다국어 지원을 하기로 하였다. 하지만, 다중 언어 번역 기능은 Unity Engine에서 제공되지 않는 것 같았다. 따라서 앱 내에서 사용되는 모든 텍스트에 대해 각 나라 언어별로 번역 데이터를 만들어 보기로 하였다. Sky 공식 디스코드를 통해 다양한 국가의 플레이어들에게 도움을 받아 각 나라별 번역 데이터를 Json 형식으로 제작하였고, 9개의 언어를 지원 할 수 있게 되었다. . Parsing 단계는 앱 실행 시 또는 앱에서 언어 변경 시 이루어진다. Parsing 후 생성된 LanguageBox 객체는 앱 종료 전까지 소멸되지 않고 Scene을 Load 할 때마다 Scene 내의 tex..

HTML 삽입 미리보기할 수 없는 소스 사실 뭔가 기록하는 것을 귀찮아하는 스타일이지만, 기록하지 않으면 아무것도 남지 않으므로.. 좀 늦긴 하였지만 개발 중단한 지 2년이 지난 Sky Studio에 대한 이야기를 해 볼까 한다. . . Sky: 빛의 아이들 "Sky: 빛의 아이들" 은 Journey로 유명한 댓게임컴퍼니의 소셜 어드벤처 인디게임이다. 게임 내에서 플레이어는 자신이 가진 아이템 하나를 등 뒤에 지고 다닐 수 있는데, 그중 직접 연주할 수 있는 악기들도 있다. 악기를 활성화 하면 동시 입력이 가능한 15개의 건반이 나타난다. 하프를 구매한 첫날, 친구로부터 배운 노래를 열심히 연습하는 중 . . 불편했던 점 15개의 건반으로도 생각보다 많은 노래들을 연주할 수 있다는 것을 알게 된 플레이어..