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);
、あなたのゲーム宇宙のマスターです。あなたはそれらをすべて得ることができるはずです。あなたのプレイヤーから望むオブジェクトまでの距離を計算してください。あなたが設定されています - これは無理な力です。あなたはあなたの好きな更新にスクリプトをつけて、プレイヤーまでの距離を計算させることができます。スレッショルド以下であれば、あなたが "プレーヤーの影響範囲内"であることを簿記者オブジェクトに通知します。このspehere ...から出てきたものを更新して削除します。それについて考えて、それをコード化します。 –
Vector3.Distanceを使用していません。 – Noobie
あなたはプレイヤーの周りにレイキャストを投げて、彼らが距離xyzで何をしているかを見ることができます。 aproachを決めて問題が発生した場合は、コードを表示してください。 –