[Unity] 플레이어 일정 거리 안 tag 오브젝트 찾기

윤수지·2025년 5월 23일

Unity

목록 보기
3/3
post-thumbnail

기능 설명

Unity3D에서 높이 상관 없이 x,z축 기준으로 플레이어 일정 거리 안에 있는 원하는 tag로 설정되어 있는 다수의 오브젝트를 찾는 기능을 구현.

사전 설정

Unity내 감지되길 원하는 오브젝트에 원하는 태그 설정

스크립트

void Start()
{
    nameTagObjects = GameObject.FindGameObjectsWithTag("nameTag");
}
void NearbyNametag()
{
    if (nameTagObjects == null || nameTagObjects.Length == 0)
        return;

    foreach (GameObject nameTag in nameTagObjects)
    {
        if (nameTag == null) continue;

        Vector3 tagPosition = nameTag.transform.position;
        Vector3 playerPosition = transform.position;

        Vector2 tagPos2D = new Vector2(tagPosition.x, tagPosition.z);
        Vector2 playerPos2D = new Vector2(playerPosition.x, playerPosition.z);

        float distance = Vector2.Distance(tagPos2D, playerPos2D);
        
        //내가 찾는 오브젝트는 Canvas로 아래와 같이 세팅
        Canvas canvas = nameTag.GetComponent<Canvas>();
        if (canvas != null)
        {
            canvas.enabled = (distance < nameTagDistance);
        }
    }
}

주의 사항

만약, 오브젝트를 찾아 비활성화를 SetActive(false) 로 하게 된다면 비활성화 후 다시 감지하지 못하는 경우가 발생한다.
왜냐하면 비활성화처리가 되면 tag로 다시 감지하지 못하기 때문이다.
그래서 나는 내가 비활성화하려 했던 오브젝트가 Canvas였기 때문에 Canvas 자체를 끄는 방식으로 처리를 하게 되었다.

실행

profile
개발공부를 하고 있는 학생입니다.

0개의 댓글