Поиск ближайшего объекта

Программирование на Юнити.

Поиск ближайшего объекта

Сообщение Sem 28 фев 2010, 21:24

Есть такая проблема: Мне нужно к примеру сделать жучка ползующего и жрущего всякий хавчик, он должен ползти к ближайшему хавчику а не становиться по середине всей этой жратвы, как у меня в скрипте))) Короче говоря мне нужно получить дистанцию до ближайшего объекта с тегом "tlia" Перечитал почти все туторы такого не нашел, самому допереть пока не получилось, прошу помочь ^:)^ вот пример моего кода:

Синтаксис:
Используется javascript
function Update () {

var respawns= GameObject.FindGameObjectsWithTag ("tlia");

for (var respawn in respawns)
{
var dist = Vector3.Distance(respawn.transform.position, transform.position);

if(dist < 100)
{
var target = respawn.transform.position;
transform.LookAt(target);
transform.Translate(Vector3.forward*2*Time.deltaTime);
}
}
}
 
Sem
UNец
 
Сообщения: 19
Зарегистрирован: 08 дек 2009, 10:01

Re: Поиск ближайшего объекта

Сообщение Paul Siberdt 28 фев 2010, 21:38

Вариант 1:
Когда жучок готов есть, рождается триггер нулевого размера и начинает расти. Как только триггер касается пищи - он передает ее координату жучку

Вариант 2:
Триггер радиусом осязания, например, 10 сантиметров, постоянно передает в массив жучка всю пищу, что в нем находится. Когда жучок готов есть - он ищет из массива ближайшую еду

Вариант 3:
Вся еда на уровне лежит в массиве еды. Как только жук хочет есть, он ищет из всего массива ближайшую.

хватит, наверное :)
Последний раз редактировалось Paul Siberdt 28 фев 2010, 22:40, всего редактировалось 1 раз.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Поиск ближайшего объекта

Сообщение Sem 28 фев 2010, 22:07

Спасибо! На счет первого я бы не догадался)) на счет второго и третьего думал и пробовал но ничего не получилось, с мосивами еще не разобрался, как я только не пробовал поместить объект в массив ничего не получается, просто еда будет создаваться кликом мыши и жуков много будет, массив должен быть безразмерным, и как с него потом вычислить минимальную дистанцию Mathf.Min()? но как
- не врубаюсь, можете написать пример как работать с масивами?
Sem
UNец
 
Сообщения: 19
Зарегистрирован: 08 дек 2009, 10:01

Re: Поиск ближайшего объекта

Сообщение Paul Siberdt 28 фев 2010, 22:58

Очень примитивный пример:

var myFood : Transform[]; // это будет массив еды
var foodCount : int = 10; // это мы определяем, что на уровне жрачки будет не больше 10 штук

где-нить на старте уровня:
myFood = new Transform[foodCount]; //рождаем массив еды под заданное число элементов

и рождаем еду (префаб еды задан, позиция и ориентация как-нить считается выше):
for (i=0; i<foodCount;i++) {
myFood[i] = Instantiate (myFoodPrefab, myPos, myRot); // терь в каждой ячейке лежит кусок еды
}

где-нить, когда надо проверить расстояние:
var closestFood : Transform = myFood[0];
for (i=1; i< foodCount; i++) {
if (Vector3.Distance(myFood[i].position, transform.position) < Vector3.Distance(closestFood.position, transform.position))
closestFood = myFood[i];
}
и вот у нас еда closestFood будет ближайшей


наверняка наделал опечаток и ошибок, так что не копипастите, а просто принцип гляньте :p

Естесственно, рождалка еды вряд ли будет в скрипте управления персонажем. Так что добавляем еще связи между компонентами различных объектов... по вкусу
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Поиск ближайшего объекта

Сообщение Sem 28 фев 2010, 23:28

Сенкс!!! :) Буду разбираться
Sem
UNец
 
Сообщения: 19
Зарегистрирован: 08 дек 2009, 10:01


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8