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.