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 자체를 끄는 방식으로 처리를 하게 되었다.
