TryGetComponent는 Unity에서 사용하는 메서드로, 게임 오브젝트의 컴포넌트를 가져오는 기능을 제공한다. 이 메서드를 사용하면 특정 컴포넌트가 게임 오브젝트에 연결되어 있는지 확인하고, 연결되어 있다면 해당 컴포넌트를 가져올 수 있다.
TryGetComponent 메서드의 형식은 다음과 같다.
public bool TryGetComponent<T>(out T component) where T : Component;
T : 가져오려는 가져오려는 컴포넌트의 타입. MonoBehaviour를 상속한 컴포넌트는 모두 사용 가능.
component : 컴포넌트를 가져올 때 사용되는 out 매개변수.
bool 형의 함수로 해당 타입의 컴퍼넌트를 찾았다면 true반환, false 반환하는 함수이다.
찾았다면 out되는 component에 해당 타입 컴퍼넌트를 할당해준다.
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
private void Start()
{
// 게임 오브젝트에 Rigidbody 컴포넌트가 있는지 확인하고 가져옴
Rigidbody rb;
if (TryGetComponent<Rigidbody>(out rb))
{
// Rigidbody 컴포넌트가 있다면 해당 컴포넌트로 원하는 동작을 수행
rb.AddForce(Vector3.up * 100f);
}
else
{
// Rigidbody 컴포넌트가 없다면 다른 처리를 수행
Debug.Log("Rigidbody component not found.");
}
}
}
GetComponent와의 차이점
-GetComponent는 해당 타입의 컴퍼넌트를 찾지 못했을 때 memory allocation을 발생시켜
Garbage Collection을 야기할 수 있다.
하지만 TryGetComponent는 해당 컴퍼넌트를 찾지 못했을 때 memory allocation이 발생하지 않고 Gabage Collection을 걱정할 필요없다.
따라서 TryGetComponent는 컴포넌트가 없어도 예외를 발생시키지 않고, 컴포넌트가 있으면 해당 컴포넌트를 가져와서 사용할 수 있다. 이를 통해 더 안전하게 컴포넌트를 가져오고 사용할 수 있다.
회고
오늘을 마지막으로 3D유니티 숙련 강의를 다들었다. 이제 내일부터 개인과제를 시작해야하는데 목요일날 제출이라 시간이 될지 모르겠다. 강의 내용도 너무 많고 강의 듣는 내내 cs파일도 너무 많이 생성하고, 메서드도 너무 많아서 뭐가 뭔지 제대로 알지못하는 상태로 따라치기만 했었던 것 같다. 그럼에도 오류가 남발했는데 정말 맨탈이 바스락해졌었다. 그래도 일단 오늘 강의는 다 끝내두어야 이틀남은 과제 제출일에 어떻게든 맞출 수 있을 것 같아서 우선은 끝내두었다. 이제 남은건 개인 과제 기능들을 구현하면서 이 기능 구현 내용을 ?번째 강의에서 본거같은데? 라는 생각으로 다시 강의를 보면서 개인과제 구현과 동시에 복습을 하는 형태로 진행해야할 것 같다.