Получение объекта по координатам

Не могу понять, что необходимо сделать, чтобы вывести GameObject по координатам.
Есть код к примеру:

cam = MainCamera.main;
planes = GeometryUtility.CalculateFrustumPlanes(cam);
for (int i = 0; i < planes.Length; ++i) {
    Plane p = planes[i];
}

То есть выводит объекты, которые видит камера, как видим, тут используется Plane и у него можно получить:
p.normal (Vector3)
p.distance (float).

Но как мне потом зная p.normal координаты, вывести GameObject, который находится по данным координатам?


Ответы (3 шт):

Автор решения: M. Green

Попробуйте использовать методы OnBecameInvisible() и OnBecameVisible() они определяются в наследнике MonoBehaviour так же, как и методы Start или Awake и вызываются, когда объект начинает/перестаёт рендриться хотя бы одной камерой.

Соответственно вы можете использовать их для того, чтобы объект регистрировал себя в каком-нибудь списке, либо удалялся оттуда при вызовах соответствующих методов.

→ Ссылка
Автор решения: Stranger in the Q

Вот то, о чем писал @M. Green, повесьте первый скрипт на камеру, а второй - на потенциально видимые объекты:


public class VisibleObjectsList : MonoBehaviour {
    public List<PotentiallyVisibleObject> list = new List<PotentiallyVisibleObject>();
}

public class PotentiallyVisibleObject : MonoBehaviour{
    private VisibleObjectsList list;

    void Start () {
        list = FindObjectOfType<VisibleObjectsList>();
    }

    void OnBecameInvisible(){
        list.list.Remove(this);
    }

    void OnBecameVisible(){
        list.list.Add(this);
    }
}
→ Ссылка
Автор решения: FixiDens

Решил вопрос:
На камеру кинул BoxColliderсделал нужный размер и повесил OnTriggerEnter. Теперь когда камера попадает на объект, он выводится в OnTriggerEnter, а по OnTriggerExit - убираю с видимости.

Еще можно будет попробовать сделать, чтобы коллайдер менялся в зависимости от дистанции камеры или угла и т.д.

→ Ссылка