Не могу понять, что необходимо сделать, чтобы вывести 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
, который находится по данным координатам?
задан 16 фев 2020 в 15:05
2
Попробуйте использовать методы OnBecameInvisible() и OnBecameVisible() они определяются в наследнике MonoBehaviour
так же, как и методы Start
или Awake
и вызываются, когда объект начинает/перестаёт рендриться хотя бы одной камерой.
Соответственно вы можете использовать их для того, чтобы объект регистрировал себя в каком-нибудь списке, либо удалялся оттуда при вызовах соответствующих методов.
ответ дан 17 фев 2020 в 4:52
M. GreenM. Green
5,1031 золотой знак10 серебряных знаков17 бронзовых знаков
1
Вот то, о чем писал @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);
}
}
ответ дан 17 фев 2020 в 8:07
Stranger in the QStranger in the Q
56k10 золотых знаков80 серебряных знаков134 бронзовых знака
11
Решил вопрос:
На камеру кинул BoxCollider
сделал нужный размер и повесил OnTriggerEnter
.
Теперь когда камера попадает на объект, он выводится в OnTriggerEnter
, а по OnTriggerExit
– убираю с видимости.
Еще можно будет попробовать сделать, чтобы коллайдер менялся в зависимости от дистанции камеры или угла и т.д.
ответ дан 17 фев 2020 в 11:37
Поиск объекта по координатам
Поиск объекта по координатам
Как я могу найти и удалить объект с определенным координатами через скрипт. Например у меня есть объект с координатами (1.0f, 1.0f, 0.0f). Как я могу через скрипт по этим данным найти его и удалить? Заранее спасибо
- Error
- UNIт
- Сообщения: 66
- Зарегистрирован: 25 авг 2015, 10:39
Re: Поиск объекта по координатам
Pollux 06 фев 2017, 20:08
Перечислить в цикле все объекты сцены и сравнить каждый с необходимыми координатами.
-
Pollux - UNITрон
- Сообщения: 276
- Зарегистрирован: 01 сен 2016, 22:31
Re: Поиск объекта по координатам
samana 06 фев 2017, 20:08
Это странный подход к удалению объектов, но ладно, раз уж так задумано. Позиция объектов находится в векторе, а у вектора числа с плавающей запятой, поэтому проверка на равенство вроде 0,023f == 0,023f может не сработать. Поэтому берите ваш вектор и пробегитесь по всем объектам и найдите расстояние до каждого. И если это расстояние очень маленькое, то удаляйте этот объект.
Возможно поможет каст сферы в нужной точке, если у ваших объектов есть коллайдеры, чтобы проверить пересечение этой сферы с любым объектом.
-
samana - Адепт
- Сообщения: 4738
- Зарегистрирован: 21 фев 2015, 13:00
- Откуда: Днепропетровск
Re: Поиск объекта по координатам
Error 06 фев 2017, 20:24
Хм, хорошая идея, спасибо
- Error
- UNIт
- Сообщения: 66
- Зарегистрирован: 25 авг 2015, 10:39
Вернуться в Почемучка
Кто сейчас на конференции
Сейчас этот форум просматривают: GoGo.Ru [Bot], Google [Bot], Yandex [Bot] и гости: 41
Определение объекта сцены по его координатам. |
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
|
|
Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Submission failed
For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
Your name
Your email
Suggestion*
Cancel
Switch to Manual
Declaration
public static GameObject Find(string name);
Description
Finds a GameObject by name
and returns it.
This function only returns active GameObjects. If no GameObject with name
can be found, null is returned. If name
contains a ‘/’ character, it traverses the hierarchy like a path name.
For performance reasons, it is recommended to not use this function every frame. Instead, cache the result in a member variable at startup. or use GameObject.FindWithTag.
Note: If you wish to find a child GameObject, it is often easier to use Transform.Find.
Note: If the game is running with multiple scenes then Find will search in all of them.
To get the position of a gameobject in the world, you can retrieve a Vector3 (x,y,z) of it’s Position from the Transform component that’s added by default to every gameobject, as seen in the inspector:
gameObject.Transform.position
returns the absolute world position.
Note that this is the same as GetComponent<Transform>().position
on your gameobject.
gameObject.Transform.localPosition
returns the position relative to that gameobject parent’s position – if your gameobject has a parent whose position is not 0,0,0 this will return the Vector3 value of what you see in the inspector, rather than the absolute world position.
If you’re not sure how to reference the two gameobjects in your script, the simplest and most basic way is to create two GameObject variables in your script and expose them in the editor (since they are serializable):
public GameObject OriginPosition;
[SerializeField] private GameObject _destinationPosition;
Above: Two ways of exposing a variable to the Unity Inspector
Above: The result, now you can simply drag and drop GameObjects into these slots.
UnityEngine.Debug.Log(OriginalPosition.Transform.position);
UnityEngine.Debug.Log(_destinationPosition.Transform.position);