Unity 내일배움캠프 TIL 1106 | Transform

cheeseonrose·2023년 11월 6일
0

Unity 내일배움캠프

목록 보기
72/89
post-thumbnail

💡 Transform

🔫 [유니티 TIPS] 알아두면 쓸 데 있는 ‘Transform(트랜스폼)’

  • 오늘은 위 영상을 보면서 Transform에 대해 공부해봤다!

🧸 Transform

  • 게임 오브젝트의 포지션, 회전, 스케일, 부모 - 자식 상태를 저장하기 위해 사용
  • 게임 오브젝트에는 항상 하나의 Transform 컴포넌트가 존재

🧩 유니티에서 게임 오브젝트를 처리하는 것들

  1. C# API
  2. C++ Engine
  3. Physics Box2D/Physx
  • C# Layer에 띄우는 Object의 Transform이 있고, 엔진 내부에서 렌더링하고 처리를 하는 Transform이 따로 있다.
  • Physics는 물리 충돌을 위한 물리 공간이 따로 있다.
    • 2D와 3D가 따로 있음
  • 코드로 Transform을 접근하게 되면 위 3가지에 영향을 주며 상호작용 하게 된다.
    → 세 가지 각각에서 계속 갱신하면서 싱크를 맞춘다.

🔮 Position과 Rotation을 함께 변경할 때

  • 엔진 내부적으로는 포지션, 트랜스폼, 스케일이 4 * 4 매트릭스로 존재
    → 서로 다 영향을 미침
  • Position이나 Rotation을 변경하면 내부적으로는 행렬을 두 번 갱신하게 되는 것 → 연산이 두 배 발생!
    • 함께 갱신할 때는 아래와 같이 사용
      void Update()
      {
      	transform.SetPositionAndRotation
          	transform.position + new Vector3(1f, 1f, 1f),
              transform.rotation + Quaternion.Euler(45f, 45f, 45f)
          );
      }

🃏 기억할 것과 주의 사항

  • 많은 시스템에서 Transform을 업데이트 하고 있다면 모든 변경 사항들을 모아서 한 군데에서 처리할 것
  • Rigidbody 컴포넌트가 있는데 Transform을 조작하게 되면 비효율적인 연산이 일어남
    • Transform은 Transform대로 움직여서 Rigidbody를 갱신
      → Physics 공간 갱신
    • Rigidbody가 존재하면 물리 공간에서도 스스로 계속 갱신이 됨
      → Transform에 변화가 일어남
      • 서로 업데이트가 일어나면서 연산이 낭비됨
      • 이러한 경우를 방지하기 위해 Project Settings - Physics - Auto Sync Transforms 옵션이 있음
      • Transform을 변경했을 때 물리 공간을 항상 싱크를 맞출 것인지, 아니면 둘 다 각각 업데이트하도록 할지 옵션을 제공
  • Transform은 객체로 존재
    • 부모 오브젝트의 Transform이 변화하면 자식 오브젝트의 모든 Transform이 갱신 됨
      → 계층 구조가 복잡해질수록 연산 증가
      → 동적으로 움직이는 오브젝트들에 대해 최대한 계층 구조를 간단하게 할 것
  • 캐릭터 같은 경우는 Hierarchy가 깊어질 수 밖에 없음
    • 보통 캐릭터 하나 당 Transform이 200개 정도
      → Inspector - Rig - Optimize Game Object 옵션이 존재
      • 일반적으로 스크립트에서 각 계층 구조에 하나하나 접근할 일이 없음
      • 각 계층 구조를 Cpp 엔진 내부에서만 사용하도록 해주는 옵션
      • 접근성은 떨어질 수 있지만 성능은 향상 됨
    • Inspector - Rig - Extra Transforms to Expose
      • 방패나 칼처럼 부착할 곳이 필요할 경우, 이곳에 추가하면 C# API에서도 접근할 수 있고 Hierarchy에도 노출 됨



끗~!

0개의 댓글