Physcics 또는 Colliders없이이 작업을 수행하려면 모든 개체에 액세스하십시오. 루프를 반복하고 레이어를 확인한 다음 일치하는 경우 Vector3.Distance
을 사용하여 각 객체의 거리를 비교합니다. 결과를 리턴하십시오.
List<GameObject> findNearObjects(GameObject targetObj, LayerMask layerMask, float distanceToSearch)
{
//Get all the Object
GameObject[] sceneObjects = UnityEngine.Object.FindObjectsOfType<GameObject>();
List<GameObject> result = new List<GameObject>();
for (int i = 0; i < sceneObjects.Length; i++)
{
//Check if it is this Layer
if (sceneObjects[i].layer == layerMask.value)
{
//Check distance
if (Vector3.Distance(sceneObjects[i].transform.position, targetObj.transform.position) < distanceToSearch)
{
result.Add(sceneObjects[i]);
}
}
}
return result;
}
이
모든
GameObjects
를 검색 할
Scene.GetRootGameObjects
를 사용하여 개선 될 수 있지만
DontDestroyOnLoad
으로 표시된 개체를 반환하지 않습니다. 확장 기능과 확장
:
public static class ExtensionMethod
{
public static List<GameObject> findNearObjects(this GameObject targetObj, LayerMask layerMask, float distanceToSearch)
{
GameObject[] sceneObjects = UnityEngine.Object.FindObjectsOfType<GameObject>();
List<GameObject> result = new List<GameObject>();
for (int i = 0; i < sceneObjects.Length; i++)
if (sceneObjects[i].layer == layerMask.value)
if (Vector3.Distance(sceneObjects[i].transform.position, targetObj.transform.position) < distanceToSearch)
result.Add(sceneObjects[i]);
return result;
}
}
사용법 :
List<GameObject> sceneObjects = gameObject.findNearObjects(layerMask, 5f);
당신이 당신의 게임 우주의 주인이다. 당신은 그들 모두를 얻을 수 있어야합니다. 플레이어와 원하는 물체까지의 거리를 계산하면 설정됩니다. 이는 무차별 적입니다. 원하는 업데이트에 스크립트를 첨부하고 플레이어와의 거리를 계산하도록 할 수 있습니다. 임계점 아래에있는 경우 "플레이어의 영향 범위 안에 있음"이라고 일부 주인 객체에게 알립니다. - 부기 관리자는 내부 목록을 확인합니다. 이 구체에서 빠져 나온 것들을 업데이트하고 제거합니다. 그것에 대해 생각하고 코드화하십시오. –
Vector3.Distance를 사용하면 많은 포인트가 비싸지 않습니까? – Noobie
당신은 플레이어 주위에 레이 캐스트를 던져서 그들이 xyz 거리에 있는지 확인할 수 있습니다. aproach를 결정하고 문제가 발생하면 코드를 보여주십시오. –