Search
Duplicate

Unity

작성일
2021/02/06 17:10
분류
Unity

Unity Hub 3.0.0-beta2 버그

유니티 버전 설치시 다운로드 완료 후 권한이 없어 설치가 불가능한 문제가 존재.
관리자 권한으로 실행해 해결 가능.
Script backend는 라이브러리 호환성이 필요한것이 아닌 이상 .NET Standard 2 로 하는것이 좋다
https://m.dcinside.com/board/game_dev/66894

Enum, UnityEvent, Scriptable Object

Enum값을 입력으로 받는 UnityEvent를 작성하고 싶을 경우에는 Enum 변수를 담고 있는 Scriptable Object를 생성해 인자로 전달받으면 된다.

Scriptable Rendering Pipeline의 Anti-Aliasing옵션

Scriptable Rendering Pipeline(SRP)를 사용중이라면 Rendering Pipeline Asset의 설정 및 Camera Component 두곳에서 Anti-Aliasing(AA) 설정을 찾아 볼수 있다. SRP의 AA는 MSAA를 조절하는것이며, Geometry를 기반으로 AA를 수행한다. 카메라의 AA는 렌더링 후 픽셀 단위에서 렌더링 하는 것이다. SRP의 AA가 카메라의 AA보다 높은 품질을 보여주지만, 부하가 더 크다. 반면, 카메라의 AA는 화면이 흐려 보일 수 있다. 두 AA는 동시에 적용될 수 있지만, 성능에 유의해서 사용하는게 좋을것이다.

CPU 부하 줄이기 기술: 충돌체 설정

Rigid Body가 없는 Collider를 이동시키는것은 CPU 부하가 생긴다. 이럴 경우 Rigid Body를 추가해 isKinetic를 체크해주자

드로우콜 줄이기 기술: GPU Instancing과 Static Batching

자동으로 이루어지는 Dynamic Batching 이외에도, 오브젝트의 드로우콜을 줄여주기 위한 방법은 여러가지가 있다. 기본 쉐이더 옵션에서는 GPU Instancing을, Player설정에서는 Static Batching을 활성화 할 수 있다. GPU Instancing은 움직이는 오브젝트를 동적으로 인스턴싱해 드로우콜을 줄여주는 옵션이다. Static Batching은 움직이지 않는 오브젝트를 하나로 묶어 드로우콜을 줄여주는 옵션이다. GPU Instancing과 Static Batching은 동시에 적용 불가능하며, 이 경우 Static Batching이 우선시된다. 정리하자면 다음과 같다. 정적 물체일 경우 → Static Batching 동적 물체일 경우 → GPU Instancing https://mathmakeworld.tistory.com/64 (우선순위: SRP > Static > GPU > Dynamic)
이유: SRP와 나머지는 버퍼 종류가 다름
SRP 배쳐는 런타임에 머테리얼 속성이나 트랜스폼 변경이 가능
https://mathmakeworld.tistory.com/m/64

프로젝트 세팅

코드 커버리지는 사용할때만 잠깐 켜주자 NGTools 이용 IL2CPP 빌드시 Stripping level 은 High로 해야함 프로젝트 생성 후 가장 먼저 x64 설정 클라우드 공유 해제 바이러스검사 제외
Visual Studio 2019 .NET Framework 3.5 개발 도구 .NET Framework 4.7.1 타기팅 팩 C# 및 Visual Basic Roslyn 컴파일러 C# 및 Visual Basic NuGet 패키지 관리자 Visual Studio Tools for Unity Unity Hub IL2CPP 빌드에 앞서 설치가 필요한것: MSVC v142 - VS 2019 C++ x64/x86 빌드 도구(v14.28) Windows 10 SDK(10.0.19041.0)

기타

Odin can serialize readonly while Unity cannot ⇒ do not use readonly to serializables
OdinSerialize하는 class는 필드 초기화를 이때 해야한다. [OnDeserializing] private void OnDeserializing() { }
https://unity3d.com/kr/how-to/unity-ui-optimization-tips
https://docs.microsoft.com/ko-kr/windows/mixed-reality/develop/unity/performance-recommendations-for-unity
Object with NO Collider and NO rigidbody: transform.position: 2.540ms Object with Collider and NO rigidbody: transform.position: 11.296ms Object with Collider and Rigidbody: transform.position: 20.429ms rigidbody.position: 1.689ms rigidbody.MovePosition(): 1.701ms
https://m.blog.naver.com/PostView.nhn?blogId=sabotduke&logNo=220802330662&proxyReferer=&proxyReferer=https:%2F%2Fwww.google.com%2F
Hierarchy Structure Guidelines
If something moves every frame, make sure all its children care about position. Only rendering, physics, audio, or core systems like that should be there.
When dynamically creating game objects at runtime, if they do not need to be children of the spawner for the above reasons, spawn things at the root of the scene.
You can easily register everything you spawn and pass along the ActiveInHeirarchy state of the spawner using OnEnable and OnDisable.
Try to group your moving transforms such that you have around 50 or so GameObjects per root. This lets the underlying system group your TransformChangeDispatch jobs into a fairly optimal amount of work per thread. Not so few that the thread overhead dominates; not so many that you are waiting on thread execution.