[Unity] 2019.3에서 눈에 띄는 기능 4가지 간단 요약

점진적 가비지 컬렉팅 (Incremental Garbage Collection) GC가 수행될 때, 모든 메모리를 해제하는 작업으로 인해 프레임이 끊기는 경우가 발생하곤 하는 데, 점직적 가비지 컬렉팅은 여러 프레임에 걸쳐 메모리를 해제하여 GC 스파이크가 발생하는 것을 방지한다.  간단히 PlayerSettings에서 체크 박스로 선택 가능하다. (유니티 블로그) 기기 시뮬레이터 (New Device Simulator) 에디터 내부에서 특정 해상도나 RAM/칩셋같은 하드웨어 정보를 세팅하여 기기 … Read more[Unity] 2019.3에서 눈에 띄는 기능 4가지 간단 요약

[Unity] 2017.4 LTS에서 2019.3으로 업그레이드시 발생한 이슈들

2017로 된 프로젝트를 2019.3에서 열었을 때, AssetDatabase Version 2로 에셋들을 리임포트 시킬지 여부를 묻는 것으로 시작한다.   AssetDatabase Version 2가 뭔가 했더니, 플랫폼 전환 사이에 일어나는 엄청난 리임포트 시간을 줄이기 위한 것으로 캐쉬된 리소스를 이용하여 리임포트 시간을 현저히 줄여준다고 한다 (Unity 블로그).  물론 이 기능이 잘 동작하는 지는 지켜봐야 할 일이다.   Crash 2017로 된 프로젝트를 2019 … Read more[Unity] 2017.4 LTS에서 2019.3으로 업그레이드시 발생한 이슈들

[Unity] 에디터 프로그래밍 – 탭(Tab) 기능

Editor window에 버튼이나 레이블등 콘트롤을 추가하다 보면 UI 공간이 부족하게 된다.  이때 탭을 넣어 화면을 전환시킨다면 하나의 윈도우에서 더 많은 UI 공간을 확보할 수 있다.  크롬 브라우저의 탭처럼 말이다.   탭만 넣는 것은 생각보다 간단하다.  GUILayout.Toolbar API만 이용하면 간단히 탭 버튼을 추가할 수 있다.  탭 버튼을 추가했으니, 화면을 전환하는 코드만 추가하면 기능상에 추가할 것은 없다.  이제 원하는 탭에 … Read more[Unity] 에디터 프로그래밍 – 탭(Tab) 기능

[Unity] 에디터 프로그래밍 – 게임 오브젝트에 이름표(Name Tag) 달아보기

위의 이미지와 같이 Scene view에서 게임 오브젝트의 이름 정보가 UI로 표시되도록 구성해보려고 한다.  이를 위해 3단계로 나누어서 구현해 보았다. 게임 오브젝트 생성 이름표 정보 GUI 표시 이름표와 게임 오브젝트사이에 연결선 그리기 첫번째인 게임 오브젝트 생성은 상황에 따라 다르겠지만, 여기서는 단순하게 Resources 폴더에 있는 MyCube.prefab을 로드하여 생성하는 것으로 해보았다.  자, 이제 오브젝트는 생성했으니, 두번째인 이름표 정보 … Read more[Unity] 에디터 프로그래밍 – 게임 오브젝트에 이름표(Name Tag) 달아보기

[Unity] 에디터 프로그래밍 – 데이터 저장

에디터 윈도우를 통해 얻은 input 데이터들은 어떻게 저장을 해야할까.  예전에 커스텀 에디터 윈도우를 띄운 후 변수와 컨테이너에 열심히 값을 담았는데, 다시 에디터 윈도우를 열었을 때 모두 사라져 버려 당황한 적이 있다.  에디터 윈도우를 닫고, 새로 열때 마다 다른 인스턴스가 만들어지기 때문에 에디터 윈도우 클래스에서 선언된 변수는 이전 변수를 가리킬 수 없게 되기 때문이다.  커스텀 윈도우를 … Read more[Unity] 에디터 프로그래밍 – 데이터 저장

[Unity] 에디터 프로그래밍 – Drag and Drop UI 구현

에디터 윈도우를 하나 띄워보고, 프리팹을 드래그 앤 드랍하여 해당 오브젝트를 사용해보자.  우선 BEditorWindow.cs 스크립트를 만들고, OnEnable, OnDisable, OnGUI 함수를 추가하였다.   파일을 드래그하여 놓을 위치는 GUI.Box를 이용하여 영역을 잡아보았다. using UnityEngine; using UnityEditor; public class BEditorWindow : EditorWindow { [MenuItem(“Tools/DragNDropWindow”)] static void Init() { EditorWindow.GetWindow(typeof(BEditorWindow)).Show(); } protected void OnEnable() { } protected void OnDisable() { } … Read more[Unity] 에디터 프로그래밍 – Drag and Drop UI 구현

[Unity] 에디터 프로그래밍 – 한글폰트 적용하기

에디터 윈도우를 하나 띄워보고, 간단한 레이블을 추가해보자.  AEditorWindow.cs를 만들어, Editor 폴더 안에 위치시키는 것으로 시작할 수 있다.  (Editor 폴더는 스페셜 폴더로서 Editor 나 EditorWindow를 상속받은 스크립트는 이 폴더 아래에 위치해야 한다.) AEditorWindow.cs에 기본 골격을 갖추기 위해 Init, OnEnable, OnDisable, OnGUI을 추가하였다. 컴파일이 잘 되었다면, 유니티 탑 메뉴에서 Tools 아래에 My Editor Window를 선택하여 창을 띄울 수 있다. OnEnable과 … Read more[Unity] 에디터 프로그래밍 – 한글폰트 적용하기

[Unity] 스크립트로 애니매이션 커스터마이즈하기

부제: Customize Animation using Script 애니매이션을 스크립트로 커스터마이즈(이하 변경)하기 위해서는 스크립트의 Execution Order(이하 실행 순서)에 대한 이해가 필요하다.  스크립트의 실행 순서란 무엇을 말하는가.  Unity 메뉴얼에 도식화가 잘 되어 있는데, 약간 복잡해 보이지만 위에서 아래로 순서대로 정렬되어 있기 때문에 보기는 어렵지 않다. Script Execution Order (Unity 메뉴얼) 실행 순서에 대해 자세한 설명은 차후에 하기로 하고, 그림에 … Read more[Unity] 스크립트로 애니매이션 커스터마이즈하기

[Unity] 오브젝트 생성/삭제시 Editor에서 메모리 해제가 잘 안된다면

Unity editor에서 프로젝트를 실행하고, Profiler를 이용하여 메모리 상태를 확인하는 경우 게임오브젝트를 생성후 삭제했음에도 불구하고, 여전히 메모리에 레퍼런스가 잡혀 있는 경우가 있다.  디바이스에서는 발생하지 않는 경우라서 editor 내부에서 캐시를 하는 경우로 보이지만, 매번 디바이스에서 프로파일링하여 확인하는 것도 여간 번거로운 일이 아니다.  시간을 줄이고 생산성을 높이자면 editor에서도 어느 정도 정확한 메모리 정보가 필요하다.  예를 들어 하나의 게임오브젝트를 … Read more[Unity] 오브젝트 생성/삭제시 Editor에서 메모리 해제가 잘 안된다면

[Unity] 에셋번들 사이즈 줄이기

부제: Assetbundle dependecy를 개선하여 에셋번들 사이즈 줄이기 Unity로 게임 개발을 하다보면 리소스(프리팹, 텍스쳐, 애니매이션, 메터리얼 등)를 대부분 assetbundle로 분리하여 관리하게 된다.  특히, 개발 기간동안 리소스가 점점 많아지게 되면  assetbundle이 중복된 리소스를 포함하는 경우가 생기는데, 이를 정리하는 것은 쉽지 않은 일이다.  중복된 리소스는 어떻게 하면 생기게 되는지, 그리고 어떻게 개선할 수 있는지를 간단히 샘플로 테스트 해보았다.  … Read more[Unity] 에셋번들 사이즈 줄이기