RoomGenerator랜덤한 그래프를 생성하는 로직을 구현해야 하는 상황이다.간단한 이론과 알고리즘이 있을 거라 생각했지만 그리 만만하지 않았다...여러 이론과 방법들을 분석하며 실제로 구현해 보자. 보로노이 + 들로네 삼각 분할보로노이는 평면을 분할하는 방법중 하나이다.평면의 두 점을 연결하고 그에 수직하는 선분으로 평면을 나누어 나간다.그러면 왼쪽 사진과 같이 평면이 자연스럽게 나눠진다.이는 CG에서 땅을 부수거나 벽이 부서지는 등의 효과를 만들 때 많이 사용된다.자연스러움이 있기 때문인 듯 하다.들로네 삼각 분할은 점들을 연결하는 삼각형을 만들 때, 최대한 정삼각형에 가깝게 만드는 방식으로 분할하는 것이다.그러기 위해서, 세 점으로 이루어진 삼각형의 외접원안에 다른 점이 없도록 해야 한다...
ThirdPerson Character Control새로운 프로젝트 스펙이 3인칭에 액션이 중요한 프로젝트라 3인칭 튜토리얼에서 이동, 카메라 제어 등을 분석해 보자.좋은 방법이 있으면 가져다 써야겠다.. ㅎ 입력 처리입력처리는 따로 컴포넌트로 분리하여 처리하는 듯하다.PlayerInput을 이용하여 입력을 처리한다.해당 프로젝트에서는 Send Message 형식으로 입력을 처리했다.#if ENABLE_INPUT_SYSTEM public void OnMove(InputValue value) { MoveInput(value.Get()); } public void OnLook(InputValue value) { if(cursorInputForLook..
NavMesh & AgentAI를 구현할 때 흔히 사용되는 길 찾기 기능을 편리하게 구현할 수 있게 해주는 Unity 패키지이다.설치해 주자. 설치를 완료했다면 AI가 목표지점으로 이동하는 기능을 만들어 보자.이동 가능한 영역을 지정하기 위해 'NavMesh Surface"를 씬에 배치해 보자.인스펙터를 보면 Nav에 대한 설정을 확인할 수 있다.그림에서 볼 수 있듯이 높이와 경사 등 설정을 확인할 수 있다.설정 변경도 가능하다.이를 확인하기 위해 Surface를 Bake 하여 확인해 보자.하늘색으로 표시된 영역이 AI가 움직일 수 있는 영역이다.이제, AI를 담당할 객체에 'NavMesh Agent'를 달아주자.속도, 가속, 도달 거리 등 설정이 가능하다.이 컴포넌트를 통해 목표지점으로 이동시켜 보자...
MNIST Sentis 분석 - MNIST (1)이전 글에 이어서 MNIST를 분석해 보자.이번 포스트에서는 그려진 텍스처를 MNIST 엔진에 전달하여 글자를 인식하고 결과를 활용하는 법을 분석할 것이다. MNIST 엔진 사용사용자가 그린 그림(?)은 drawableTexture에 데이터로 저장되어 있다.이를 MNIST엔진에 전달하여 데이터를 받아와야 한다.이 흐름은 Infer에서 담당한다.void Infer(){ var probabilityAndIndex = mnist.GetMostLikelyDigitProbability(drawableTexture); probability = probabilityAndIndex.Item1; predictedNumber = probabilityA..
Sentis유니티에서 AI를 활용할 수 있게 해주는 Sentis를 분석해 보자.https://unity.com/kr/products/sentis Unity 센티스: Unity 런타임에서 AI 모델 사용 | UnitySentis는 게임 개발에서 AI 모델 혁신을 지원합니다. 사용자 디바이스에서 Unity Runtime을 통해 AI 모델을 실행하여 새롭고 다이내믹한 경험을 제공하세요.unity.comSentis는 학습된 AI 모델을 실행할 수 있게 해주는 패키지이다.Open Neural Network Exchange(ONNX) 형식으로 모델을 변환하면 사용할 수 있다고 한다.예제를 살펴보며 어떻게 사용하는지 알아보고 huggigface에서 모델을 받아와 사용하는 게임을 만들어 보자.https://huggin..
레벨 디자인프로토타입을 위한 간단한 레벨 디자인 방법을 알아보자. ProBuilderProBuilder는 레벨 디자인을 간단하지만 효과적으로 구성할 수 있게 도와주는 툴이다.실제로 아티스트가 작업한 작업물보다는 퀄리티가 떨어지겠지만 프로토타입에 쓰기에는 충분하다.ProBuilder를 설치하고 윈도우를 켜보자.NewShape을 클릭하면 도형을 간단하게 만들 수 있다.만들 도형의 종류와 설정을 결정하고 Scene View에서 드래그하면 도형이 만들어진다. ProBuilder로 만들어진 도형은 유니티 기본 도형과는 달리 추가적인 컴포넌트가 추가되어 있다.내용을 살펴보니 도형을 그리는 코드인 것 같다.최종적으로 수정이 완료되면 해당 스크립트를 삭제하고 mesh로만 동작하도록 만들어주는 것이 좋다고 한다...
Lighting씬을 구성할 때 분위기를 내는데 가장 중요한 요소는 lighting이라고 생각한다.무턱대고 light를 계속해서 늘리면 성능상의 문제가 생길 수 있다.빛에 대한 연산이 많이 소요되며 직접광뿐만 아니라 반사광까지 계산해야 하기 때문에 버벅거림, 프레임 드롭이 일어날 수 있다.이를 해결하기 위해 bake 기능을 많이 이용하는데 이에 대해 분석해 보자. Bakebake란 lighting을 미리 계산하여 lightmap으로 구워놓는 것을 말한다.즉, 실시간으로 동작하는 게임에서 미리 계산된 빛과 그림자를 이용하여 화면에 출력하겠다는 뜻이다.이렇게 미리 계산해 놓으면 실시간으로 광원에 대한 반응을 계산할 필요가 없어지므로 성능상의 이점이 있다.단, 말그대로 미리 계산하는 것이기 때문에 움직일..
종속성 분석 툴 제작 종속성 분석이 끝난 노드를 보기 좋게 그리는 작업을 해보자.종속성의 계층 구조 및 흐름을 보기 좋게 트리 형식으로 그리며 사이클이 판정되면 해당 사이클의 연결선은 빨간색으로 표시해 보자. 데이터 저장을 위한 구조 변경 종속성 분석이 완료된 상태이니 노드를 보기 좋게 배치하는 작업이 필요하다.여러 시도를 해봤지만 선택한 노드를 중앙에 배치하고 방사형으로 퍼져 나가는 그림이 가장 보기 좋았다.그렇기 때문에 종속성을 depth를 기준으로 표현해야 한다.struct를 통해 이를 표현해 보자.public class AssetNode{ public string Path; // 에셋 경로 public int Depth; ..
종속성 분석 툴 제작이제 마지막으로 종속성을 분석하고 그래프를 그리는 작업을 해보자. 종속성 분석종속성을 분석하는 방법은 여러 가지이다.AssetDatabase.GetDependencies()스크립트 분석어셈블리 분석 GetDependencies의 경우에는 meta파일을 읽어 GUID를 통해 종속성을 분석한다.프리팹 안에 또 다른 프리팹이 포함되어 있거나 이를 참조하는 등 파일 간의 종속성을 파악하는 데는 효과적이다.하지만, 일반적인 C#클래스같은 Type형태의 클래스에 대해서는 참조를 계산하지 못할 수 있다.따라서, GetDependencies를 통해 간편하게 참조를 확인할 수 있는 에셋에 대해서는 GetDependencies를 진행하고 스크립트처럼 다르게 처리해야 하는 에셋들을 분류하여 종속성..
종속성 분석 툴 제작종속성 분석 툴 제작 - 1이전 포스팅에서 툴의 외형을 그리는 것까지는 완료하였다.이번에는 UI에 기능을 추가하여 그래프를 그리는 것까지 해보자. 컨트롤 패널 기능우선 선택된 에셋에 에셋을 등록하는 것을 구현해 보자.private void InitializeAssetList(){ assetList = new ReorderableList(selectedAssets, typeof(string), true, true, true, true); // 헤더 설정 assetList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "선택된 에셋"); }; // 요소 그리기 ass..