C# 如果没有物理/光线投射,我如何检测附近的游戏对象?

C# 如果没有物理/光线投射,我如何检测附近的游戏对象?,c#,unity3d,unity5,C#,Unity3d,Unity5,我试图检测对象的范围内有球员作为原点。 我如何在不使用碰撞器或Physical.OverlaptSphere()的情况下从播放器周围的给定区域找到变换,我不想使用此方法,因为我需要的唯一信息是从给定的图层任务对附近对象的变换(更具体地说,是位置和旋转)如果我使用物理学,我将不得不在我认为不必要的每一点上触发 是否有其他方法可以找到附近的点,但与使用物理的方法类似?如果您想在没有物理或碰撞器的情况下找到这些点,请访问所有对象。在它们之间循环,检查图层,如果它们匹配,使用Vector3.Distan

我试图检测对象的范围内有球员作为原点。 我如何在不使用碰撞器或
Physical.OverlaptSphere()
的情况下从播放器周围的给定区域找到
变换
,我不想使用此方法,因为我需要的唯一信息是从给定的
图层任务
对附近对象的变换(更具体地说,是位置和旋转)如果我使用物理学,我将不得不在我认为不必要的每一点上触发


是否有其他方法可以找到附近的点,但与使用物理的方法类似?

如果您想在没有物理或碰撞器的情况下找到这些点,请访问所有对象。在它们之间循环,检查图层,如果它们匹配,使用
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;
}
用法:

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

你是游戏世界的主人。你应该能把它们都弄到手。计算玩家到所需对象的距离,然后设置-这是蛮力方式。你可以给你想要的更新附加一个脚本,让它计算到玩家的距离,如果它低于阈值,你会通知某个簿记员对象你“在玩家的影响范围内”-簿记员会在更新时检查其内部列表,并删除从这个范围中得到的东西。。。等等。想一想并编写代码。我没有使用矢量3。许多点的距离都很昂贵?你可以在播放器周围放置光线投射,看看它们在距离xyz中的位置。如果你决定了一个解决方案,并且遇到了问题,给我们看代码。或者甚至不是那样……我确实想过,但我只是想知道这是否是一个类似于物理的解决方案。重叠();但是不使用物理为什么?向量,距离是非常简单的数学,这是计算机擅长的。Raycast是更复杂的数学,所以我不会求助于它。影响范围决定(我假设)边界体积的重叠-这比计算两个3d点之间的距离更复杂。
List<GameObject> sceneObjects = gameObject.findNearObjects(layerMask, 5f);