[내일배움캠프 TIL] Unity의 Transform 세계

KYJ의 Tech Velog·2023년 10월 19일
0

TIL

목록 보기
48/71

Today I Learned

Unity는 3개의 공간으로 이루어져 있습니다.

Today I Done

문제

여러 가지 물리 처리가 되어 있고 CharacterController도 적용되어 있고 Rigidbody도 들어가 있는 플레이어블 캐릭터가 있습니다.

이 캐릭터가 맵에서 떨어지면 체크포인트에서 리스폰되도록하는 기능을 구현하고 있었습니다.

이 때 플레이어 오브젝트의 transform.position을 지정해둔 체크포인트 position으로 설정해주었는데 이동이 되지 않았습니다.

시도

정말 여러가지 시도해보았습니다. CharacterController의 Move함수도 사용해보았고 translate도 해보았지만 이동되지 않았습니다.

결국 여러가지 정보를 찾아보던 중, 유니티의 세계의 대한 정보를 발견했습니다. 유니티의 공간은 다음과 같이 3개로 나누어진다고 합니다.

  • C# API
    스크립트로 개발자가 직접 접근하는 Transform 공간
  • C++ Engine
    Unity는 C++로 구현되어 있어 엔진만의 Transform 공간이 존재
  • Physics
    물리 공간용 Transform 공간

이 프로젝트의 플레이어는 예상하기에 세 공간의 Transform이 모두 적용되고 있을 거라 생각합니다.

그 상황에서 스크립트로 Transform을 변경하려고 하니 이 작업이 충돌되어 처리되지 않았나라는 생각이 듭니다.

해결

Project Settings - Physics에 Auto Sync Transforms라는 옵션이 있습니다.

이 옵션을 활성화하게 되면 세 공간의 Transform을 자동으로 동기화하게 됩니다. 결국 우리의 Transform 변경은 알아서 세 공간에서 동기화되록 처리되게 되어 리스폰에 성공하게 되었습니다.

알게된 것

Unity의 공간이 3개로 구분되어 있다는 것과 한 오브젝트에 많은 공간 처리가 들어가면 제대로 동기화가 되지 않는다는 점, 이를 자동으로 동기화할 수 있도록 처리해주는 옵션이 있다는 점, 모두 새로 알게된 지식입니다.

하지만 결국엔 Auto Sync Transforms 옵션도 처리해야될 오브젝트가 많아진다면 부하가 걸리지 않을까란 생각이 듭니다.

Tomorrow's Goal

0개의 댓글