Unity

· Game/Unity
레벨 디자인프로토타입을 위한 간단한 레벨 디자인 방법을 알아보자.     ProBuilderProBuilder는 레벨 디자인을 간단하지만 효과적으로 구성할 수 있게 도와주는 툴이다.실제로 아티스트가 작업한 작업물보다는 퀄리티가 떨어지겠지만 프로토타입에 쓰기에는 충분하다.ProBuilder를 설치하고 윈도우를 켜보자.NewShape을 클릭하면 도형을 간단하게 만들 수 있다.만들 도형의 종류와 설정을 결정하고 Scene View에서 드래그하면 도형이 만들어진다. ProBuilder로 만들어진 도형은 유니티 기본 도형과는 달리 추가적인 컴포넌트가 추가되어 있다.내용을 살펴보니 도형을 그리는 코드인 것 같다.최종적으로 수정이 완료되면 해당 스크립트를 삭제하고 mesh로만 동작하도록 만들어주는 것이 좋다고 한다...
· Game/Unity
Lighting씬을 구성할 때 분위기를 내는데 가장 중요한 요소는 lighting이라고 생각한다.무턱대고 light를 계속해서 늘리면 성능상의 문제가 생길 수 있다.빛에 대한 연산이 많이 소요되며 직접광뿐만 아니라 반사광까지 계산해야 하기 때문에 버벅거림, 프레임 드롭이 일어날 수 있다.이를 해결하기 위해 bake 기능을 많이 이용하는데 이에 대해 분석해 보자.     Bakebake란 lighting을 미리 계산하여 lightmap으로 구워놓는 것을 말한다.즉, 실시간으로 동작하는 게임에서 미리 계산된 빛과 그림자를 이용하여 화면에 출력하겠다는 뜻이다.이렇게 미리 계산해 놓으면 실시간으로 광원에 대한 반응을 계산할 필요가 없어지므로 성능상의 이점이 있다.단, 말그대로 미리 계산하는 것이기 때문에 움직일..
· Game/Unity
종속성 분석 툴 제작 종속성 분석이 끝난 노드를 보기 좋게 그리는 작업을 해보자.종속성의 계층 구조 및 흐름을 보기 좋게 트리 형식으로 그리며 사이클이 판정되면 해당 사이클의 연결선은 빨간색으로 표시해 보자.     데이터 저장을 위한 구조 변경 종속성 분석이 완료된 상태이니 노드를 보기 좋게 배치하는 작업이 필요하다.여러 시도를 해봤지만 선택한 노드를 중앙에 배치하고 방사형으로 퍼져 나가는 그림이 가장 보기 좋았다.그렇기 때문에 종속성을 depth를 기준으로 표현해야 한다.struct를 통해 이를 표현해 보자.public class AssetNode{ public string Path; // 에셋 경로 public int Depth; ..
· Game/Unity
종속성 분석 툴 제작이제 마지막으로 종속성을 분석하고 그래프를 그리는 작업을 해보자.     종속성 분석종속성을 분석하는 방법은 여러 가지이다.AssetDatabase.GetDependencies()스크립트 분석어셈블리 분석 GetDependencies의 경우에는 meta파일을 읽어 GUID를 통해 종속성을 분석한다.프리팹 안에 또 다른 프리팹이 포함되어 있거나 이를 참조하는 등 파일 간의 종속성을 파악하는 데는 효과적이다.하지만, 일반적인 C#클래스같은 Type형태의 클래스에 대해서는 참조를 계산하지 못할 수 있다.따라서, GetDependencies를 통해 간편하게 참조를 확인할 수 있는 에셋에 대해서는 GetDependencies를 진행하고 스크립트처럼 다르게 처리해야 하는 에셋들을 분류하여 종속성..
· Game/Unity
종속성 분석 툴 제작종속성 분석 툴 제작 - 1이전 포스팅에서 툴의 외형을 그리는 것까지는 완료하였다.이번에는 UI에 기능을 추가하여 그래프를 그리는 것까지 해보자.     컨트롤 패널 기능우선 선택된 에셋에 에셋을 등록하는 것을 구현해 보자.private void InitializeAssetList(){ assetList = new ReorderableList(selectedAssets, typeof(string), true, true, true, true); // 헤더 설정 assetList.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "선택된 에셋"); }; // 요소 그리기 ass..
· Game/Unity
종속성 분석 툴 제작설계나 리팩토링 과정에서 AI에게 코드를 분석해 달라고 요청했더니 클래스를 도식화하여 종속성을 나타내 보여주었는데 이러한 툴이 있다면 참 편할 것 같다고 생각하여 툴을 제작하려 한다.언리얼 엔진의 경우에는 참조 그래프를 그려주는 내장 툴이 있는데 유니티는 그래프는 아니고 다음과 같이만 표시를 해줬다.이걸로 어느 정도 알 수 있지만 클래스 간의 참조 관계를 알 수 없다.어디에 사용되는지 정도만 표시되는 것 같다.그래서 간단하게 스크립트를 지정하면 종속성을 그래프로 표현해 주는 툴을 제작하려 한다.     필요 기능 정리해당 툴에 필요한 기능을 간단하게 정리해보자.에디터 윈도우스크립트 선택종속성 검사그래프 그리기     에디터 윈도우해당 툴은 에디터에서 구조를 편하게 확인하려는 목적이기 ..
· Game/Unity
오브젝트 생성 최적화오브젝트를 여러 개 생성할 때 프레임 드롭이 일어나는 것을 발견하였다.30초 정도 게임을 진행시켰을 때 연출을 위해 쌓아둔 바둑돌들이 많이 쌓이며 프레임이 20대까지 떨어진다.이를 해결하는 방법을 연구해보자.     원인 분석우선, 씬에 존재하는 오브젝트는 거의 UI이고 성능에 크게 문제 될 것들이 없다.앞에서 말했듯이 바둑돌이 많이 쌓이는 것이 근본적인 문제인 것 같다.     첫 번째 시도단순하게 물체가 너무 많은 것 같아 움직이지 않는 바둑돌을 삭제하려는 시도를 했다.이때, 단순히 삭제하지 않고 바둑돌을 생성하는 객체에서 오브젝트 풀을 이용하여 관리하며 불필요한 생성을 막으려 했다.바둑돌의 RigidBody의 Sleep을 이용하여 Threshold를 적절히 조절하여 객체를 반환하..
유니티 씬 전환Unity에서 씬을 전환할 때 생길 수 있는 이슈에 대해 다뤄보고 해결법을 알아보자.     UI 재활용게임을 개발하다보면 동일한 UI가 여러 씬에서 사용되는 경우가 있다.그런 경우 모든 씬에 UI를 배치하고 동일한 설정을 해주는 것은 꽤나 번거로운 일이다. 이를 해결하기 위해서는 해당 UI를 Prefab으로 만들고 필요시에 Instantiate하면 된다.만약, 재사용될 여지가 있다면 Manager클래스 같은 곳에서 풀링하여 관리하는 것도 좋은 방법이다.     SerializedField 관리여러 씬에서 사용되는 오브젝트들은 DontDestroyOnLoad를 통해 씬 이동시 파괴되지 않게 막는 경우가 많다.이런 경우 해당 오브젝트에 씬에 배치된 오브젝트를 SerializedField를 이..
{ "name": "GameAssembly", "references": ["Unity.TextMeshPro", "UniRx"], "optionalUnityReferences": ["TestAssemblies"]} 테스트개발 과정에서 여러 가지 테스트가 필요한 경우가 있다.이러한 테스트를 간편하게 진행할 수 있게 해주는 Framework가 있다.     Test Runnertest Runner는 Unity에서 제공하는 Test Framework이다.두 가지의 모드가 존재한다.play mode: 런타임에 사용할 기능 테스트(runtime)edit mode: 에디터에서 사용할 기능 테스트(static) 사용법에디터에서 Test 하고 싶은 폴더를 선택하여 테스트 폴더를 생성한다.이후, Assembly Defin..
Unity - Builder유니티 빌드를 도와주는 github extension이다.https://github.com/marketplace/actions/unity-builder Unity - Builder - GitHub MarketplaceBuild Unity projects for different platformsgithub.comname: Build projecton: [push, pull_request]jobs: buildForAllSupportedPlatforms: name: Build for ${{ matrix.targetPlatform }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: ..