Unity는 Inspector 창에서 특정 컴포넌트 타입의 변수를 정의했을 때, 해당 게임 오브젝트가 여러 컴포넌트를 가지고 있어도, 지정된 타입에 맞는 컴포넌트만 자동으로 선택해서 할당합니다.
이 원칙은 모든 컴포넌트에 동일하게 적용되며, Unity가 오브젝트를 관리하는 방식에서 비롯됩니다.
Transform 컴포넌트의 경우
모든 게임 오브젝트는 기본적으로 Transform 컴포넌트를 가지고 있습니다.
Transform은 오브젝트의 위치, 회전, 크기를 관리하는 컴포넌트로, 이 컴포넌트가 없는 오브젝트는 존재할 수 없습니다.
만약 당신이 스크립트에서 Transform 타입의 변수를 선언했다면, 이 변수는 Inspector 창에서 게임 오브젝트를 드래그해 넣을 때 오브젝트에 포함된 다른 컴포넌트는 무시하고, 오직 Transform만 가져옵니다.
게임 오브젝트가 MeshRenderer, Collider, 또는 AudioSource 같은 다른 컴포넌트를 가지고 있어도 상관없습니다. Unity는 그 중에서 Transform 컴포넌트만 자동으로 선택해 변수에 할당합니다.
Script 에서
public Transform playerTransform;
로 선언하고
Inspector 창에서 playerTransform 에 'Player Character' 라는 GameObject 를 드래그했을 때
Player Tranform 은 'Player Character' 오브젝트의 Transform 컴포넌트만 가져옵니다.
오브젝트가 어떤 종류의 다른 컴포넌트를 가지고 있든 상관없습니다.
Rigidbody 컴포넌트의 경우
게임 오브젝트에 추가할 수 있는 컴포넌트 중 하나가 **Rigidbody**입니다.
Rigidbody는 물리 연산을 적용하기 위해 필요한 컴포넌트로, 중력이나 충돌 같은 물리적 효과를 시뮬레이션할 때 주로 사용됩니다.
만약 스크립트에서 Rigidbody 타입의 변수를 선언했다면, 이 경우에도 Inspector 창에서 게임 오브젝트를 드래그하면 Unity는 그 오브젝트에서 Rigidbody 컴포넌트를 자동으로 찾아서 할당합니다.
만약 해당 오브젝트에 Rigidbody가 없다면, Inspector 창에서 드래그할 수 없거나 오류 메시지가 뜨겠죠.
그리고 이때도 오브젝트에 여러 다른 컴포넌트가 있더라도 오직 Rigidbody 컴포넌트만 가져옵니다.
그래서 위 이미지서 예시를 든 것처럼, Inspector 창에서 게임 오브젝트를 드래그하면, Unity는 그 오브젝트의 Rigidbody 컴포넌트만 선택해서 myRigidbody 변수에 할당합니다.
오브젝트에 MeshRenderer, Collider 등 다른 컴포넌트가 많아도 타입에 맞는 컴포넌트만 가져오는 것이죠.
내부 작동 원리
Unity는 게임 오브젝트가 가지고 있는 다양한 컴포넌트를 내부적으로 관리합니다.
게임 오브젝트에 여러 개의 컴포넌트가 포함될 수 있지만, Unity는 Inspector에 정의된 타입에 맞춰 해당 오브젝트의 컴포넌트를 자동으로 검색합니다.
그리고 그 중에서 일치하는 컴포넌트를 선택하여 할당합니다.
이 과정은 Unity 엔진이 게임 오브젝트와 그 안에 포함된 컴포넌트들을 관리하는 방식 덕분에 가능한 것입니다. 게임 오브젝트는 일종의 컨테이너처럼 다양한 컴포넌트를 담고 있지만, 특정한 타입의 컴포넌트만 필요할 때 Unity는 이를 자동으로 찾아내서 할당해 줍니다.
정확하게는 드래그한 후 마우스를 놓는 순간 에 Unity가 필요한 컴포넌트를 찾아서 할당하고, 그 후에는 별도의 추가 작업 없이 바로 그 컴포넌트를 사용할 수 있게 됩니다.
정리
게임 오브젝트에 여러 컴포넌트가 있을 때, Unity는 지정된 타입의 컴포넌트만 자동으로 선택해 할당합니다.
Transform 컴포넌트는 게임 오브젝트마다 기본으로 포함되어 있기 때문에 언제나 드래그할 수 있습니다.
Rigidbody와 같은 다른 컴포넌트들도 동일하게 동작하며, 해당 컴포넌트가 오브젝트에 있을 경우에만 Inspector에서 드래그해서 할당할 수 있습니다.
이 원칙 덕분에 우리는 Inspector 창에서 게임 오브젝트를 드래그해 넣기만 하면, Unity가 자동으로 필요한 컴포넌트만 가져다 할당해 주는 편리함을 누릴 수 있는 것입니다.
'프로그래밍 > Unity' 카테고리의 다른 글
유니티에서 특정 오브젝트 찾기 #01 : 성능 최적화 (0) | 2024.10.19 |
---|---|
유니티에서 Layer 의 역할 : 성능 최적화 (0) | 2024.10.19 |
RoundToInt() (0) | 2024.10.18 |
StartCoroutine (1) | 2024.10.12 |
편집 도구는 어떤걸 선택해야 하나? (Visual Studio, Visual Studio Code) (2) | 2024.10.10 |