Получение объекта по координатам
Не могу понять, что необходимо сделать, чтобы вывести 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 шт):
Попробуйте использовать методы OnBecameInvisible() и OnBecameVisible() они определяются в наследнике MonoBehaviour так же, как и методы Start или Awake и вызываются, когда объект начинает/перестаёт рендриться хотя бы одной камерой.
Соответственно вы можете использовать их для того, чтобы объект регистрировал себя в каком-нибудь списке, либо удалялся оттуда при вызовах соответствующих методов.
Вот то, о чем писал @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);
}
}
Решил вопрос:
На камеру кинул BoxColliderсделал нужный размер и повесил OnTriggerEnter.
Теперь когда камера попадает на объект, он выводится в OnTriggerEnter, а по OnTriggerExit - убираю с видимости.
Еще можно будет попробовать сделать, чтобы коллайдер менялся в зависимости от дистанции камеры или угла и т.д.