제목이 다소 요란하죠? 그만큼 이 에셋을 사용하면 유니티 개발자들은 "나 코드좀 짠다!" 라는 말을 할 수 있습니다. 왜냐고요? 이 에셋은 Scriptable Object를 효율적으로 사용할 수 있게 아키텍쳐를 제공해주기 때문입니다! SOAP는 에셋이기 때문에 다른 Asset에서 참조할 수 있고 런타임 및 에디터에서 접근할 수 있습니다. SO를 사용하면 뭐가 좋냐고요?! 리소스 관리, 메모리 관리, 유니티에서 권장하는 Enter Play Mode까지 가능하다고요!!! 유니티 답답한 에디터 실행으로부터 해방! #Enter Play Mode Settings 움짤을 보시면 차이가 느껴지십니까? 좌측 움짤의 경우 컴파일 시간이 굉장히 긴 데 반면에, 우측 움짤은 에디터 플레이 시작 버튼을 누름과 동시에 바로 플..
Windows standalone settings Stereo Rendering Mode - Multi Pass 또는 Single Pass Instanced 렌더링 모드를 선택할 수 있습니다. Multi Pass 또는 Single Pass Instanced에 대해서는 언급한 적이 있으니 해당 포스트를 보고 오시길 추천드립니다! 유니티 Multi Pass와 Single Pass Instanced/Multi View에 대해 VR작업을 하다보면 초반 세팅하는 부분에 한 번씩쯤 다들 봤을 것입니다. Rendering Mode에 보면 Multi Pass와 Single Pass Instanced , 모바일의 경우 Multi View가 존재합니다. 이 3개의 차이는 아래 표와 같습니 wlsdn629.tistory.c..
유니티에는 다양한 Attribute가 존재합니다. HideInInspector: 스크립트의 공개 속성이라도 인스펙터에서 보이지 않게 할 수 있습니다. AddComponentMenu: 스크립트를 Unity의 컴포넌트 메뉴에 추가할 수 있습니다. ContextMenu: 스크립트의 메서드를 인스펙터의 컨텍스트 메뉴에 추가할 수 있습니다. CreateAssetMenu: 스크립트를 Unity의 에셋 메뉴에 추가할 수 있습니다. ExecuteInEditMode: 플레이 모드가 아닌 에디터 모드에서도 스크립트를 실행할 수 있습니다. RequireComponent: 스크립트가 특정 컴포넌트를 필요로 할 때, 그 컴포넌트를 자동으로 추가할 수 있습니다. Tooltip: 인스펙터에서 변수에 대한 설명을 표시할 수 있습니다..
Injection 의존성 주입(Dependency Injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 기술이라고 합니다. 의존성 주입 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할 ko.wikipedia.org 유니티를 위한 DI 프레임워크, VContainer이란? [VContainer이란?] VContainer는 Unity를 위한 가볍고 빠른 DI(Dependency Injection) 프레임워크로, 종속성 및 개체 생성을 쉽게 관리할 수 있도록 도와줍니다. DI는 종속성의 생성 및 관리를 ..
프로젝트를 하다보면 씬창과 게임창 모두 켜놓고 작업하는 경우가 많습니다. 하지만, 두 창을 모두 켜놓고 에디터를 플레이하게 되면 작업 환경에 따라 랙이 걸리곤 합니다. 이럴 때, 창을 하나만 띄워둔다면 랙이 줄어든 느낌을 경험할 수 있습니다! 물론, 에디터를 실행하지 않는 경우에는 두 창 모두 띄워놔도 상관은 없습니다.
Mesh Baker 에셋을 이용하여 모델을 추출해냈는데 문제가 생겼습니다. 유니티 MeshBaker MeshBaker란? 여러 개의 메시를 하나의 큰 메시로 결합하고 해당 오브젝트의 텍스처를 텍스처 아틀라스 및 텍스처 배열로 만드는 데 있어 도움을 주는 툴(Tool)입니다. 텍스쳐 아틀라스를 사용하지 wlsdn629.tistory.com 뽑아낸 모델의 메쉬를 보니 할당은 되어 있는데 따로 리소스가 생겨나지 않았습니다. 리소스로 생겨나지 않았기 때문에 모델을 건내줄 때 메쉬가 없는채로 주게 되어, 모델을 받는 쪽에서는 아무것도 보이지 않는 문제가 생깁니다. (모델을 줄 때 export 했다는 과정) 그 외에도 해당 모델을 실수로 삭제한다고 하면 다시는 메시를 복구할 방법이 없다는 문제 등이 있습니다. 해결..
Application SpaceWarp란? Application SpaceWarp는 애플리케이션이 실제 디스플레이 갱신 속도의 절반으로 렌더링하도록 허용합니다. 예를 들어, 기존 72 FPS으로 돌아가던 애플리케이션의 FPS를 36으로 렌더링한다는 뜻입니다. 애플리케이션은 "standard eye buffer" 외에도 "motion vector buffer"와 "depth buffer"렌더링해야 하며, Application SpaceWarp 시스템을 사용하여 새로운 프레임과 동기화하여 여전히 72 FPS를 디스플레이에 출력하도록 합니다. 32FPS와 72FPS차이가 궁금하시면 토글 펼치기~ 더보기 36fps로 렌더링 장면을 렌더링하고 초당 36회 디스플레이를 업데이트합니다. 각 프레임을 렌더링하는 데 약..
partial class를 사용하여 클래스 정의를 여러 소스 파일에 분할할 수 있습니다. 이는 대규모 프로젝트에서 여러 프로그래머가 동시에 작업하거나 자동으로 생성된 소스 코드를 수정할 때 유용합니다. partial class를 사용하면 클래스의 정의를 여러 부분으로 나눌 수 있으며, 컴파일 시간에 나눠진 부분들이 결합됩니다. using System;// Employee 클래스를 partial로 분할public partial class Employee{ public void DoWork() { Console.WriteLine("Employee is working."); }}// Employee 클래스의 다른 부분public partial class Employee{ p..
메소드 숨기기는 파생 클래스에서 기본 클래스의 메서드와 동일한 이름을 사용할 수 있도록 합니다. override 한정자는 기본 클래스의 virtual 메서드를 확장하고, new 한정자는 기본 클래스의 메서드를 숨깁니다. class BaseClass { public void Method1() { Console.WriteLine("Base - Method1"); } } class DerivedClass : BaseClass { public new void Method1() { Console.WriteLine("New - Method1"); } } 이렇게 new한정자를 사용하여 DerivedClass derivedClass = new DerivedClass (); derivedClass.Method1(); 를..
프로젝트를 하다보면 하나의 Scene에 모든것을 관리하려니 리소스 관리가 힘들어지는 경우가 종종 생깁니다. 이럴 때 하나의 Scene을 여러개의 Scene으로 나누어서 관리한다면 좀 더 관리하기가 수월해집니다. 예를 들어, 하나의 Scene에서는 핵심 Core System만 다루고, 다른 Scene에서는 비쥬얼을 담당하는 Design System만 다룬다면 개발자와 디자이너가 작업하기에도 편하고, 협업 과정에서 충돌가능성이 적어질 수 있습니다. 저는 com.unity.multiplayer.samples.coop의 Boss Room에 있는 코드를 가져와서 사용하고 있으며, 코드를 공유드리고자 합니다. GitHub - Unity-Technologies/com.unity.multiplayer.samples.c..
LoadSceneMode에는 두 가지 옵션이 있습니다. Single: 이 옵션을 사용하면, 기존에 로드된 모든 씬이 종료되고 지정한 씬이 로드됩니다. 즉, 현재 열려 있는 씬을 닫고 새로운 씬을 엽니다. 씬을 종료한다는 것은 해당 씬에 생성된 모든 게임 오브젝트를 파괴한다는 의미입니다. Additive: 이 옵션을 사용하면, 현재 로드된 씬에 지정한 씬이 추가로 로드됩니다. 즉, 현재 열려 있는 씬을 유지하면서 새로운 씬을 엽니다. 이렇게 하면 여러 씬을 동시에 열어놓을 수 있습니다. 따라서, LoadSceneMode.Single은 새로운 씬을 열 때마다 기존의 씬을 닫는 반면, LoadSceneMode.Additive는 새로운 씬을 열 때마다 기존의 씬을 유지합니다. 이 두 가지 옵션을 적절히 사용하여..
예전 제 포스팅에는 Render Texture, Stencil Mask 등 여러가지 기술을 이용해서 거울을 구현해본 적이 있습니다.
VR작업을 하다보면 초반 세팅하는 부분에 한 번씩쯤 다들 봤을 것입니다. Rendering Mode에 보면 Multi Pass와 Single Pass Instanced , 모바일의 경우 Multi View가 존재합니다. 이 3개의 차이는 아래 표와 같습니다. 기능 Multipass (다중 패스) Single Pass Instanced Multiview 렌더링 방식 여러 개의 렌더 패스를 사용하여 화면을 그립니다. 단일 렌더 패스에서 모든 드로우 콜을 인스턴스화된 드로우 콜로 교체합니다. 단일 렌더 패스에서 모든 드로우 콜을 처리합니다. 효율성 느림 (여러 번의 렌더링 작업이 필요) CPU 사용량: 크게 감소, GPU 사용량: 소폭 감소 CPU 사용량: 적게 줄지만 GPU 사용량은 미세하게 개선됩니다. 사..
유니티 프로젝트를 하다 보면 위와 같이 경고문을 볼 수 있습니다. 몇 몇 경고문들은 주의하셔야 하지만, 사용되지 않는 필드 등 필요 없는 경고문도 존재합니다. 그런 경고문을 아래 코드를 사용하여 없앨 수 있습니다. #pragma warning disable 경고문을 보면 해당 경고문의 번호가 나오는 데 해당 번호를 적으시면 됩니다.
프로젝트를 하다 보면 분리된 메쉬가 필요한 경우가 생기지만, 아래처럼 하나로 메쉬가 묶여있는 경우가 종종 있습니다. 디자이너가 있는 팀이라면 디자이너에게 요청해서 하나로 묶여 있는 포스트잇 메쉬를 나눠달라고 요청할 수 있지만, 수정되는 시간을 기다리기 아깝고, 또는 디자이너가 없는 1인 개발자라면 하나로 묶여 있는 메쉬를 분리하기란 어렵습니다. 이럴 때 사용할 수 있는 에셋이 바로 Mesh Extractor입니다! Mesh Extractor에셋이란? 위 사진처럼 하나로 묶여 있는 포스트잇 메쉬에서 필요한 포스트잇 메쉬만 추출하는 등 모델의 일부를 추출해내는 에셋입니다. 모델을 추출할 때 텍스처와 다시 매핑된 UV가 포함된 프리팹으로 추출해낼 수 있으며, Pivot도 설정할 수 있습니다. 사용방법도 매우 ..