자 다들 유니티를 한다면 한번쯤은 들어봤을 "TryGetComponent" 이제 이것이 뭔지 같이 알아보자
GetComponet?
먼저 TryGetComponent가 뭔지 알려면 GetComponent라는 것을 알아야 된다.
다들 Rigidbody나 Renderer같은 컴포넌트를 Inspector창에서 직접가져오기 귀찮아서 Awake문이나 Start문에서 한번씩은 써봤을것이다.
이처럼 유니티 오브젝트에 있는 컴포넌트를 가져와 제어 하는것인데. 이것은 어디에서나 쓸 수는 있지만 반복되는 Update문이나 FixedUpdate문에서 쓴 적은 없을 것이다. 그렇다면 왜 쓰지 않는가 알아 보자
애초에 GetComponent라는 함수가 가볍지 않다는 말을 들은적이 있을 것이다. 왜냐 결국은 컴포넌트를 불러오는 것이기 때문에 Scene뷰에 있는 오브젝트를 통해 불러올 수 밖에 없는 것이다. 밑에 코드를 보면
void Update(){
GetComponent<Rigidbody>.velocity = Vector3.Up;
}
이런식으로 쓴다면 코드 길이가 길어지기도 하며, 매 프레임마다 오브젝트를 통해 불러오기 때문에 쉽지 않다 이것을 해결하기 위해
Rigidbody rb;
void Start(){
rb = GetComponent<Rigidbody>();
}
이런식으로 바꿔 변수 rb를 만들어 호출해 쓴다. 하지만 rpg며, FPS 같은 장르들의 경우는 매 순간 불러와야 되는 경우가 있다. 그것에서 쓸 수 있는 것이 바로
TryGetComponent!
저자도 유니티로 프로젝트 만드는 중에 알았다
이 TryGetComponent의 경우 if문에서 독단적으로 사용이 가능하여 만약 컴포넌트가 있을 경우만 불러오기 때문에 불필요한 Tag를 달아주지 않아도 사용이 가능하다.
그렇기 때문에 GetComponent보단 사용이 어렵겠지만 이것과 다르게 가비지 컬렉터를 불러오지 않고 사용할 수 있다
이제 사용방법을 알아보자. 밑에는 콜리더 충돌의 경우다
private void OnCollisionEnter(Collision other)
{
if(other.TryGetComponent(out T name){
name.methods();
}
}
이런식으로 접근하여 사용이 가능하다.
이런식을 사용하여 유니티를 사용한 프로젝트에 부하를 조금이라도 줄여서 출시해보자..!