티스토리 뷰

출처 : https://www.youtube.com/watch?v=cSwB2brGVPY - 오지현 Evangelist 


요약 


Transform 변경은 유니티 엔진을 구성하는 C++ 레이어에 메세지를 보낸다 이는 성능에 악영향을 끼친다. 최적화 방법으로는 

1.  SetPositionAndRotation을 사용하자

2.  Optimize Game Objects 옵션을 활성화 시켜주자


본문 


Transform은 모든 게임 오브젝트에 존재합니다. 이 Transform이 변경이 되면 c++로 이루어진 유니티 엔진 내부에 'OnTransformChanged' 라는 메세지를 보냅니다. 대부분의 경우 게임 오브젝트는 부모 자식 관계를 갖는 계층 구조를 갖게됩니다. 부모의 Transform이 변경이될 경우 자식의 모든 Transform이 변경이되기 때문에 더 많은 메세지가 보내지게 됩니다. Transform을 코드상에서 변경하는 것이 아닌 Anim, Physics에서 변경이 되는 것도 마찬가지로 메세지를 보내게 됩니다. 


1
2
3
4
5
void Update()
{
    transform.position += new Vector3(1f, 1f, 1f);
    transform.rotation += Quaternion.Euler(45f, 45f, 45f);
}
cs

Transform 이 Position, Rotation 둘 다 변경되기 때문에 2번 메세지가 보내지게 됩니다. 만약 계층 구조를 이루고 있다면 모든 자식 게임 오브젝트들이 2 번 메세지를 보내므로 성능에 악영향을 끼칩니다. 


1
2
3
4
5
6
7
void Update()
{
    transform.SetPositionAndRotation(
        transform.position + new Vector3(1f, 1f, 1f),
        transform.rotation + Quaternion.Euler(45f, 45f, 45f)
    );
}
cs

Unity 5.6 이상 부터는 SetPositionAndRotation 이라는 함수가 생겼습니다. 이 함수를 사용하면 Position과 Rotation을 동시에 변경할 수 있어 메세지가 한번만 보내지게 됩니다. 이론상으로는 성능이 2배 향상됩니다.


Transform 변경을 많이 시키지 않는 게임을 만들고 있으니 상관없는 이야기다 라고 생각하실 수도 있습니다. 하지만 캐릭터 하나에도 본 구조 만큼 수많은 Transform이 존재합니다.


캐릭터의 본 구조 만큼 존재하는 Transform


사진의 출처는 위와 같습니다.


위에서 말씀드렸듯 Anim에 의해서도 Transform이 변경이되고 메세지가 전달되어 성능에 악영향을 미칩니다. 이를 해결하기 위해서는 Optimize Game Objects 옵션을 활성화 시켜주기만 하면 됩니다. 이 옵션을 활성화 시키면 메시 스키닝 연산을 멀티스레드로 할수 있게 재배치 해줍니다. (2017 버전 이후에서는 기본적으로 메시 스키닝 연산을 멀티스레드로 합니다)  그리고 또 이 옵션은 캐릭터 안의 Extra transform을 제거해줍니다. 물론 제거되길 원하지 않는 Transform 데이터를 제거에서 예외시키는 것도 가능합니다. 


Extra transform이 제거된 모습


사진의 출처는 위와 같습니다.


제외되길 원하지 않는 Transform을 선택하는 옵션


사진의 출처는 위와 같습니다.


2018 버전 부터에서는 인스턴스마다 따로 Optimize Transform Hierarchy 옵션을 통해 Extra transform을 제거할 수 있습니다.


사진의 출처는 위와 같습니다.

 




'Unity > Study' 카테고리의 다른 글

C# 열거형과 비트연산자  (1) 2018.08.30
자식 Transform 가져오기 [Unity]  (0) 2018.07.07
[Unity] 옵저버 패턴  (0) 2018.07.04
[Unity] Singleton 패턴  (0) 2018.06.15
[WPF] Delegate + 트리 하위 요소 탐색  (0) 2018.06.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함