🎐 처음에 배우는 방식
유니티에서 Colider 혹은 Trigger 대상의 움직임 여부를 구분할 때 주로 CompareTag 또는 레이어 구분을 사용하게 됩니다.
스크립트의 유무를 구분하지 않고 Collider가 들어간 모든 객체에 대해서 판단해주기 때문에 다루기 쉬워서 처음에 주로 배우고 사용하는 방법입니다.
#태그 구분 방법
if (collision.gameObject.CompareTag("Monster"))
{
Destroy(this.gameObject);
}
#레이어 구분 방법
public void OnTriggerEnter2D(Collider2D collision)
{
if (levelCollisionLayer.value == (levelCollisionLayer.value | (1 << collision.gameObject.layer)))
{
DestroyProjectile(collision.ClosestPoint(transform.position) - direction * .2f, fxOnDestroy);
}
else if (rangeWeaponHandler.target.value == (rangeWeaponHandler.target.value | (1 << collision.gameObject.layer)))
{
ResourceController resourceController = collision.GetComponent<ResourceController>();
if (resourceController != null)
{
resourceController.ChangeHealth(-rangeWeaponHandler.Power);
if (rangeWeaponHandler.IsOnKnockback)
{
BaseController controller = collision.GetComponent<BaseController>();
if (controller != null)
{
controller.ApplyKnockback(transform, rangeWeaponHandler.KnockbackPower, rangeWeaponHandler.KnockbackTime);
}
}
}
DestroyProjectile(collision.ClosestPoint(transform.position), fxOnDestroy);
}
}
위와 같이 CompareTag 혹은 layer를 사용하게 되는데 layer 쪽에서 보시면
ResourceController resourceController = collision.GetComponent<ResourceController>();
GetComponent를 통해 값을 바꿔주거나 활용해야되는 상황이 생깁니다. 그럴 때는 Tag나 Layer보다 TryGetComponent를 사용하면 좋은데요. TryGetComponent를 활용 시에 좋은 점은 다음과 같습니다.
🎆 TryGetComponent의 이점
- 활용이 필요한 컴포넌트를 명확히함.
- Interface를 활용하여 묶기 가능하고 아무거나 엮은 Tag, Layer 감지를 방지.
또한..
Layer나 Tag 같은 경우에는 개수의 제한도 있고, 처음에 합의되지 않는 내용의 경우 충돌날 가능성이 존재하지만, TryGetComponent는 기존, 혹은 직접 만든 Scripts를 활용하여 구분하는 것이기에 작업 영역이 구별될 수 있고 역할을 명확하게 쓴다는 점이 가장 큰 장점 같습니다.
'유니티 스파르타 캠프 8주차' 카테고리의 다른 글
250527 매니저 클래스 관리방법 (3) | 2025.05.27 |
---|---|
250526 유니티 스크립트패턴 MVC, MVVP 어떤 걸 써야할까? (1) | 2025.05.26 |