Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

유니티 최적화 #2

Open
Jiny530 opened this issue Feb 2, 2021 · 0 comments
Open

유니티 최적화 #2

Jiny530 opened this issue Feb 2, 2021 · 0 comments

Comments

@Jiny530
Copy link
Owner

Jiny530 commented Feb 2, 2021

제일 먼저, 가비지 컬렉터가 실행되는 것을 방지해야 함.

가비지 컬렉터 : 메모리 해제를 위해 자동으로 호출되는 것.

일어나게 되면 렉이 발생함.

동적 메모리 해제가 가능한 일어나지 않도록 하는 것이 핵심.

스크립트 최적화

유니티 객체들은 변수에 저장 후, 캐싱해서 사용하는 것이 좋음.

FindObject 계열의 함수는 매우 느리므로 미리 찾아서 캐싱하기.

Instantiate와 Destory보다는 활성/비활성화를 위주로. 왜냐하면 비용이 크기 때문.

오브젝트 풀에 많이 생성하여 활성화/비활성화 하는 방식으로 사용할 것.

가져와서 사용, 끝나면 비활성화 상태로 반환. 선택이 아닌 필수!!

Update보다는 Coroutine을 활용하기.

박싱과 언박싱은 부하가 큰 작업임. (언박싱에서 가비지 컬렉터가 발생함.)

박싱 : object a = 20;

언박싱 : int b = (int)a;

박싱 : 값 형식을 참조 형식으로 변환.

언박싱 : 참조 형식을 값 형식으로 변환.

벡터끼리의 값을 계산할 때에는 magnitude보다는 sqrMagnitude를 사용해서 비교하기.(제곱근은 계산하지 X)

삼각함수의 값은 상수로 저장하고 사용하기.

문자열은 가급적 const 또는 readonly를 사용하기(가비지 컬렉터 발생 우려)

String + Stirng을 쓰면 임시 문자열이 생성되기 때문에, StringBuilder.Append() 함수를 사용하여 병합하기.

태그 비교에는 c.tag == "player" 대신에 c.CompareTag("player")을 사용하기. tag 프로퍼티는 추가 메모리를 할당하기 때문.

즉시 해제할 때에는 Dispose를 수동 호출한 후, 그 즉시 cleanup을 사용하기.

임시 객체들을 만들어내는 것들은 특히 조심할 것. GetComponent<>는 한번만 호출하여 사용하기.

Start()와 Update()는 비어있으면 꼭 제거하기. 이는 비어있어도 성능에 영향을 끼침.

물리기능 최적화

움직이지 않는 배경 물체는 static으로 설정할 것.

리지드 바디가 없는 고정 충돌체가 움직이면 CPU의 부하가 발생함. 이유는 물리 월드를 재구성하기 때문. 리지드 바디 추가 -> isKinematic 사용.

Solver Iteration Count 조정하기. Edit > Project Setting > Physics에 위치해 있으며, 물리 관련 계산을 얼마나 정교하게 할지 지정.(높을수록 정교)

Sleep를 조절하여, 리지드 바디의 속력이 설정된 값보다 작으면 휴면상태에 들어가며, Physics.Sleep()로 강제 휴면 상태로.

물리 처리에선 태그 대신 레이어가 훨씬 유리하며, 성능과 메모리에서 장점을 가짐.

메쉬 콜라이더는 절대 사용 X

레이캐스트와 Sphere Check같은 충돌 감지 요소 최소화시키기.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant