본문 바로가기

TOOL

Unity CG / Boehm-Demer-Weiser / 점진적 GC Unity GC Unity에서는 Boehm-Demer-Wiser(줄여서 Boehm방식 GC)를 사용한다.이는 Stop the world방식의 GC이다. 하지만 기존의 Boehm방식의 GC는 C / C++을 타겟으로 만들어진 라이브러리였다.그래서 Mono2.8 이상부턴 SGen으로 GC를 변경하였지만Unity는 Mono2.8 이하버젼이므로 Boehm방식 GC를 사용한다. 점진적 GC 비점진적 GC의경우 GC가 발생하면 Stop the world를 한 후 한번에 모든 GC처리를 수행 한 후 프로그램을 작동시킨다.하지만 점진적 GC의 경우 GC작업을 여러개의 슬라이스로 분할하여 GC작업을 위해 프로그램 실행을 한번에 오랫동안 중단하지 않고여러번에 걸쳐 짧게 중단하는 방법이다.GC의 수행시간이 짧아지는건 아니지..
Unity Heap Memory 구조 Unity는 Code 영역을 제외하고 크게 두가지 Heap Memory를 관리한다. Native heap Memory(Unity Engine이 관리하는 Memory) Unity Engine이 내부적으로 C++로 구현되어 있기 때문에 Native Heap이다.Unity Engine이 OS로부터 memory를 할당받아 texture, sound, level data등을 저장하고 있는 영역으로unity engine이 담당하여 scene전환이 일어날 떄 필요없게 된 resource를 해제하는 작업을 engine이 자동으로 수행한다. Engine에 의해 memory가 자동으로 해제되지 않는 경우 DontDestroyOnLoad( ) 함수를 통해 개발자가 scene전환이 일어나도 memory가 해제되지 않도록 설정..
Mono / Mono Behaviour Mono Mono는 .NET Framework의 open source platform으로서 cross-platform application의 개발을 지원한다.C# 과 CLI에 기반을 두고있다. Unity의 Mono Unity Scripting system의 기반이다..NET에 깁나하지만 다른 여러 프로그래밍 언어를 지원하는 .NET과 달리 C#, Boo, Javascript만 지원한다. Scripting Language Scripting Language 혹은 extension language는 하나 이상의 application에서 script를 지원하는 프로그래밍의 부분집합(Subset)이다. Script Script는 Application의 core code와는 별개의 언어로서 최종 사용자에 의해 작성..
IL2CPP / GCC / C# C++ Assembly 변환과정 IL(Intermediate Language) CIL과 동일한 중간단계 언어이다. IL2CPP msc.exe를 이용하여 IL code를 생성한 후에 il2cpp.exe라는 프로그램을 이용해 IL code를 C++형태로 변환한다.AOT컴파일방식을 사용하며 mono보다 빌드 시간이 더 길다.(unity 2017에서 IL2CPP는 .NET 4.6 API를 지원한다.) P.S) mono framework에서는 C++로 변환하는 과정없이 IL을 바로 Assembly로 변환한다.IOS에서는 mono는 지원하지 않고 IL2CPP만 지원한다. 또한 Mono로 build하는것보다 IL2CPP로 Build를 하게될 경우 보안성이 우수해진다.mono로 build하였을 경우 apk file 내부에 Assembly-CSharp..
Asset Bundle Manager Asset Bundle Manager 이름 그대로 asset bundle을 효율적으로 사용할 수 있도록 만들기 위해 제작된 도구이다. Asset bundle Manager Package를 download하고 import하면 새로운 API호출이 추가될 뿐만 아니라 일부 Editor 기능이 추가되어 작업과정을 간소화 시켜준다. 이 기능은 Asset menu option에서 찾을 수있다. Assetbundles에는 다음과 같은 Option이 있다. Simulation Mode Simulation Mode를 활성화 하면 실제로 asset bundle을 build하지 않은 상태에서도 asset bundle manager가 asset bundle과 함께 작동할 수 있게 된다. Editor는 asset bundle에..
Asset bundle 사용법 Unity 5 기준 Asset bundle을 load 하는 방법은 4가지의 API를 사용할 수 있다. 4가지 API의 동작은 Asset bundle이 load되는 flatform과 build될때 사용되는 압축방법(Uncompressed, LZMA, LZ4)에 따라 다르다. 작업에 사용할 4가지 API -AssetBundle.LoadFromMemoryAsync -AssestBundle.LoadFromFile -WWW.LoadfromChacheOrDownload (사용하면 안됨, 아래있는 UnityWebRequest로 사용할것 / 이유는 다른글에서 설명했음) -UnityWebRequest, DownloadHandlerAssetbundle (Unity 5.3 or newer) AssetBundle.LoadFr..
대표적인 Memory leak 발생 유형 Singleton static instance 더이상 사용하지 않는 singleton객체의 OnDestroy( )함수에서 반드시 instance = null; 처리를 해 주어야 한다.그렇지 않으면 OnDestroy( ) 이후에도 객체는 계속해서 살아있다. OnDestroy( )함수를 만들어 두고, instance = null; 코드를 넣어둘것 Delegate 저번에도 언급한적 있지만A객체의 delegate에 B객체의 event를 등록한다.B객체를 파괴시키려 할때 A객체에 등록해준 event를 해제(unregister)해 주지 않으면A객체가 파괴되지않는 이상 B객체도 파괴되지 않는다. 따라서 B객체 파괴시 자신의 모든 event가 제대로 등록해 둔 모든 delegate에서 해제되는지를 보장해 주어야 한다...
Asset Bundle Resorce Folder 사용을 자제할것 Resorce Folder는 앱에 같이 묶여 들어가기 때문에 사용 유무에 상관없이 packaging되어 apk의 크기가 커지고그렇게 되면 app이 시작할때 resource file을 read하는 작업도 느려진다.또한 resource folder를 사용할 때 current scene에서 사용되지 않는 object라도 meta data를 전부 memory에 띄우기 때문에 asset이 많을수록기본적인 memory사용량이 계속 증가한다. 하지만 app에서 처음부터 끝까지 반드시 사용될경우 Resorce Folder에 넣어도 무관 Asset : Unity로 게임을 만들때 사용되는 Image, text, audio, animation data등을 의미 Asset Bundl..