Comment détecter des GameObjects à proximité sans physique / raycast?

J’essaie de détecter l’object dans une plage ayant le joueur comme point d’origine. Comment trouver les Transforms d’une zone donnée autour du lecteur sans utiliser de collisionneur ni Physics.OverlaptSphere() Je ne souhaite pas utiliser cette méthode car la seule information dont j’ai besoin est la transformation des objects proches d’un LayerMask donné (plus précisément , la position et la rotation) Si je voulais utiliser la physique, je devrais mettre un déclencheur sur chaque point que je trouve inutile.

Existe-t-il une autre méthode pour trouver les points proches, mais similaire à celle utilisant la physique?

Si vous voulez le faire sans Physcics ou Colliders, accédez à tous les objects. Parcourez-les, vérifiez le calque et, s’ils correspondent, utilisez Vector3.Distance pour comparer la distance de chaque object. Renvoie le résultat.

 List findNearObjects(GameObject targetObj, LayerMask layerMask, float distanceToSearch) { //Get all the Object GameObject[] sceneObjects = UnityEngine.Object.FindObjectsOfType(); List result = new List(); 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; } 

Cela peut être amélioré en utilisant Scene.GetRootGameObjects pour récupérer tous les GameObjects mais ne renvoie pas les objects marqués comme DontDestroyOnLoad .

Étendu en tant que fonction d'extension:

 public static class ExtensionMethod { public static List findNearObjects(this GameObject targetObj, LayerMask layerMask, float distanceToSearch) { GameObject[] sceneObjects = UnityEngine.Object.FindObjectsOfType(); List result = new List(); 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; } } 

Usage:

 List sceneObjects = gameObject.findNearObjects(layerMask, 5f);