-어디선가 퍼옴-
tranform 모든게임오브젝트에 기본적으로 존재.
트랜스폼 변경시 : C++ : OnTransformChanged 메세지를 보냄
부모가 바뀌면 더 많은 메세지를 보냄
C# : OnBeforeTransformParentChanged
C# : OnTransformParentChanged
심지어 계층구조인 경우 부모가 Transform변경이 일어나면 자식들의 Transform에도 영향을 끼친다.
메세지를 호출하는 대표적인 세가지.
position rotation scale
Animator Physics.
1 change = 1 message!
Physics 컴포넌트는 피직스 씬에도 영향을 줌.
그리고 수 많은 유니티 내부 컴포넌트 들에 영향을 끼침.!
Physics,Renderers,UnityUI
void Update()
{
트랜스폼 포지션 += 벡터
트랜스폼 로테이션 +=쿼터니언 오일러
}
이런식의 변화는 두번 메세지가 발생해서 좋지 않다!
따라서 아래와 같이
void Update()
{
transform.SetPositionAndRotation(벡터,벡터);
}
이렇게 하면 메세지가 한번만 발생해서 이론상 두배 빨라짐!
유니티짱은 트랜스폼이 150개가 있는데. 캐릭터가 100개면 15000개의 트랜스폼이 변경이 일어남.
따라서 캐릭터는 모델임포트 세팅에 Rig부분에 OptimizeGameObjects 옵션을 체크하는게 좋음.
이 옵션을 켜면 스키닝 연산을 멀티스레드로 돌리게 됨. (스키닝 연산이 빨라짐.)
Unity2017버전 부터는 옵션을 켜지 않아도 기본적으로 스키닝 연산은 멀티스레딩임.
근데 이경우에 문제는.. 캐릭터가 투구를 쓰거나, 방패를 끼거나 이런 경우에 붙이 오브젝트가 없어서 안됨.
이럴 경우에는 옵션에 들어가서 예외 설정을 해 줄수 있음. 그럼 어태치 가능한 트랜스폼이 생김!