и снова NavMeshAgent

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

и снова NavMeshAgent

Сообщение noseeevil 21 мар 2013, 22:27

подскажите кто-нибудь кто разобрался с NavMeshAgent'om
например с помощью setDestination(Vector3) я задаю путь, чтоб проверить дошел ли объект до точки я делаю вот такую проверку
if((NavMeshAgent.pathEndPosition - NavMeshAgent.transform.position).magnitude == 0.0f){ } , может это и бредовое решение конечно но работает, никто не знает может есть встроенное решение какое-нить? какой-нибудь статус там?
потому что данное решение не всегда подходит
noseeevil
UNIт
 
Сообщения: 107
Зарегистрирован: 23 фев 2013, 00:46

Re: и снова NavMeshAgent

Сообщение extravert 22 мар 2013, 10:36

Я бы не советовал сравнивать так как ты это делаешь сейчас.
Причины:
1) почти наверняка твой персонаж движется только по земле. как следствие точка Y у transfrom.position должна иметь немного другое значение, а точнее должна быть связана с террейном. То есть Terrain.SimpleHeight.
2) встречаются ситуации при которых игрок останавливается рядом с точкой, но не в ней. Нужно допускать погрешность
3) я предполагаю, что свойство hasPath может служить внутренним флагом. Если это работает, то ответ на твой вопрос - "да, есть другое решение".
4) так же я предполагаю, что свойство sterringTarget может отлавливать текущее действие, а если действия закончены - может стать равной null либо значению по умолчанию.

если вариант 3 или 4 сработают, будь добр, отпиши в пм и сюда.
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: и снова NavMeshAgent

Сообщение noseeevil 24 мар 2013, 22:41

extravert писал(а):Я бы не советовал сравнивать так как ты это делаешь сейчас.
Причины:
1) почти наверняка твой персонаж движется только по земле. как следствие точка Y у transfrom.position должна иметь немного другое значение, а точнее должна быть связана с террейном. То есть Terrain.SimpleHeight.
2) встречаются ситуации при которых игрок останавливается рядом с точкой, но не в ней. Нужно допускать погрешность
3) я предполагаю, что свойство hasPath может служить внутренним флагом. Если это работает, то ответ на твой вопрос - "да, есть другое решение".
4) так же я предполагаю, что свойство sterringTarget может отлавливать текущее действие, а если действия закончены - может стать равной null либо значению по умолчанию.

если вариант 3 или 4 сработают, будь добр, отпиши в пм и сюда.


1) что-то на подобии такого я использую
2) уточни пожалуйста если задать координаты агенту через SetDestination() то агент остановится или в самой точке или если конкретно на нее попасть нельзя он остановится максимально близко к ней(.pathEndPosition()) ты имеешь ввиду это?

раньше когда я использовал hasPath оно работало немного странно, но наверное я что-то намутил сам, вообщем пока-что самый оптимальный вариант что я нашел вот

if(_navAgent.hasPath == false && _navAgent.remainingDistance != 0){
//условие
}

1) если у агента нету пути hasPath == false, remainingDistance == 0
2) если задать путь hasPath == true, remainingDistance == infinity а потом расстояние типа float
3) когда агент дошел то hasPath == false, a remainingDistance == значение больше 0 типа float(remainingDistance: 0.009452363)


тут таки вопрос, получается до конца агент все-равно не доходит???
noseeevil
UNIт
 
Сообщения: 107
Зарегистрирован: 23 фев 2013, 00:46

Re: и снова NavMeshAgent

Сообщение extravert 25 мар 2013, 10:14

именно, что может не дойти. предположим, что точка недостижима (со всех сторон стена), или в эту точку встал другой юнит. Естественно, что мы не можем в ней оказаться.
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 16