[Unity] Addressable과 메모리 관리

Addressable을 이용하고 있다면 메모리 관리 측면에서 잘 사용하고 있는지 체크해 볼 필요가 있다. LoadAssetAsync를 통해 해당 키를 가진 번들을 메모리에 올리고, Instantiate를 통해 오브젝트를 생성하는 루틴은 아무 문제가 없다. 더불어 OnDestory일 때, LoadAssetAsync에서 저장해둔 핸들을 통해 번들을 릴리즈함으로써 메모리에서 해제할 수 있다. (정확히는 Garbage Collect전까지 메모리에 상주한다.) 하지만, 만약 opHandle을 저장하고 있고, 여러 클래스에서 같은 … Read more[Unity] Addressable과 메모리 관리

[Unity] ParticleSystem의 성능 최적화 (Prewarm/Culling Mode)

보통 아트 부서에서 ParticleSystem을 이용하여 이펙트를 만들지만, 최적화는 프로그래머가 담당하게 된다. 이때 파티클의 emission 개수나 duration에 대한 조언을 하게 되는데, 이것들 외에 체크해 볼 것이 prewarm과 culling mode이다. Prewarm 기능은 파티클의 emission을 한번 한 상태로 만들어 주어 다음 파티클 플레이시 원하는 모양으로 분사되도록 한다. 하지만, 씬을 로딩할 때 부하를 주기도 하는데, prewarm된 파티클의 개수에 따라 … Read more[Unity] ParticleSystem의 성능 최적화 (Prewarm/Culling Mode)

[Unity] Composite Collider 2D의 성능 이슈

Composite Collider 2D는 Box Collider 2D 또는 Polygon Collider 2D를 사용할 때 하나의 콜라이더로 머지하여 사용할 수 있는 컴포넌트이다. 그러나 머지하는 단계가 런타임에서 이루어 지기 때문에 Scene 로딩시에 로딩 시간을 길어지게 하는 요인이 될 수 있다. Composite Collider 2D를 가지는 게임 오브젝트에 자식으로 많은 수의 Box 또는 Polygon Collider 2D를 배치할 경우 그 수 만큼의 … Read more[Unity] Composite Collider 2D의 성능 이슈

[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

Unity 2019부터 .NET 3.5는 더 이상 지원되지 않고, .NET Standard 2.0과 .NET 4.X가 지원된다. .NET Standard 2.0/.NET 4.X은 Unity 2017까지 사용하던 .NET 2.0/.NET 2.0 Subset과 같지 않다. 그래서 글로벌 게임을 서비스 중이라면 CultureInfo로 인해 특정 국가에서 크래시 같은 예기치 않은 상황이 발생하는지 확인해 볼 필요가 있다. String.ToLower 메서드는 소문자로 변환하기 위해 많이 사용하는 API이다. toLower를 … Read more[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

[Unity] SetScriptingDefineSymbolsForGroup으로 define 변경 및 적용이 잘 안될 때

PlayerSettings.SetScriptingDefineSymbolsForGroup을 이용하여 스크립트에 정의된 define을 변경할 때, 컴파일이 되지 않고 변경 전에 define으로 되어 있던 상태의 assembly로 남아있는 경우가 있다. 환경 Unity 2020.3.7f1 Android Platform on Windows 10 프로젝트 폴더 내에 아래와 같이 Library\ScriptAssemblies 폴더를 보면 Assembly-CSharp 관련 dll들이 있는데 이것들이 컴파일 되어 최신으로 변경되는 지 확인할 필요가 있다. 동일한 기능을 Unity 2017.4에서 문제없이 사용했었기 … Read more[Unity] SetScriptingDefineSymbolsForGroup으로 define 변경 및 적용이 잘 안될 때

[Unity-iOS] UnityFramework에 Crashlytics의 Run Script 적용

환경 Unity 2020.3.7f1 Crashlytics 7.5.0 Xcode 12.2 Unity 2019부터 적용되는 Unity as a Library로 인해 iOS빌드 시에 UnityFramework 타겟의 라이브러리 파트와 Unity-iPhone 타겟의 런처 파트로 나뉘게 된다.  여기서 Crashlytics를 적용 중인 프로젝트라면 Run Script가 두개의 타겟에 모두 적용되어 있는지 확인할 필요가 있다.  각 타겟의 Build Phase에서 아래 그림과 같이 되어 있는지 살펴보자. 현재 사용 중인 … Read more[Unity-iOS] UnityFramework에 Crashlytics의 Run Script 적용

[Unity] Assembly-CSharp-firstpass.dll의 Sharing violation on path 에러

환경 Unity 2020.3.7f1 Windows 10 Visual Studio Community 2019 증상 유니티 에디터와 Visual Studio가 열린 상태에서 스크립트가 컴파일 될 때 아래와 같은 에러 발생 Copying assembly from ‘Temp/Assembly-CSharp-firstpass.dll’ to ‘Library/ScriptAssemblies/Assembly-CSharp-firstpass.dll’ failed. Detailed error: Sharing violation on path 분석 Assembly-CSharp-firstpass.dll은 무엇인가. Assembly-CSharp-firstpass.dll은 컴파일 순서에 따라 첫번째로 컴파일 된 결과물이다. Standard Assets과 Plugins에 포함된 스크립트들이 대상이고 첫번째 … Read more[Unity] Assembly-CSharp-firstpass.dll의 Sharing violation on path 에러

[Unity-AOS] Application.Quit()으로 종료시 크래시 이슈

환경 Windows 10 Unity 2020.3.7f1 IL2CPP AOS 빌드 증상 Applicaiton.Quit()으로 앱 종료시 랜덤하게 크래시 발생함 Crash Logs 해결 (UnityPlayerActivity 확장을 사용한다는 가정) UnityPlayerActivity.java 파일의 onDestroy 함수에 removeAllViews() 추가함. 이유는 확실히 모르겠으나 android.view.SurfaceView 관련하여 null object에 접근하는 것으로 보여 모든 view에 대한 제거를 시도함. @Override protected void onDestroy () { mUnityPlayer.removeAllViews(); mUnityPlayer.quit(); super.onDestroy(); }

[Unity] 빌드된 에셋번들을 까보자

유니티에서 빌드된 에셋번들 파일은 바이너리 형식이기 때문에 어떤 내용이 들어있는지 확인할 수가 없다.  여러가지 이유로 빌드된 에셋번들을 열어볼 필요가 있는 데, 게임 오브젝트 정보부터 쉐이더 정보까지 여러가지를 텍스트로 확인해 볼 수 있다.  툴은 유니티가 설치된 폴더 하위에 Tools라는 폴더에 모두 있다.  Windows:C:\Program Files\Unity\Editor\Data\ToolsMac OSX:/Applications/Unity/Unity.app/Contents/Tools 두 가지 툴을 사용할 필요가 있는데, 윈도우 기준으로 WebExtract.exe와 binary2text.exe이다.  WebExtract.exe는 … Read more[Unity] 빌드된 에셋번들을 까보자

[Unity] aab(Android App Bundle)파일에서 테스트 가능한 apk 추출하기

apk 사이즈를 100Mb이하로 유지하기 힘들다면, Android App Bundle을 고려해 보아야 한다 (유니티 블로그).  플러그인도 늘어나고, 그에 따라 라이브러리 사이즈도 점점 늘게되면 에셋번들로 빼는 것도 한계가 오기 때문이다.  App Bundle은 구글 플레이로 부터 사용자의 기기 구성에 따라 최적화된 apk만 생성하여 제공 받게 되는 시스템이다.  유니티에서는 Build Settings에서 간단히 체크박스로 App Bundle을 선택할 수 있다. (버전 2018.3이상, 2017.4.17이상) … Read more[Unity] aab(Android App Bundle)파일에서 테스트 가능한 apk 추출하기