Свой cast
|
|
DantorS | Дата: Среда, 12 Марта 2014, 19:42 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Всем привет. Я знаю что существуют spherecast, capsulecast и raycast. Как можно создать свой cast. Создать объект и прописать ему св-ва стандартным кастасм?
|
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 22:47 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Тригонометрия в помощь. Есть разные алгоритмы, по которым можно получить точку пересечения примитивов и для каждого примитива алгоритм свой. В любом случае парой строчек кода здесь не обойдешься. Придется вручную перебирать все объекты на сцене, брать у них данные о коллайдере и использовать в своем алгоритме. Конечно, я могу ошибаться. Возможно класс Physics может немного облегчить эту задачу.
Из предыдущих тем я понял, что ты хочешь реализовать зону видимости бота в виде прямой треугольной призмы. Если да, то проверять с такой призмой все объекты - бессмысленно. Проще сравнить угол поворота бота с игроком. Если бот смотрит на игрока, то уже пускать до него обычные лучи, дабы отследить препятствия на пути к игроку. Ты же кидал видео, в котором была нужная тебе система AI. Там все сделано было на лучах. Так напиши такую же. Так же я тебе скидывал в ЛС свой вариант возможной реализации AI, который, на мой взгляд, добавил бы больше реалистичности ботам, т.к. там учитывалась еще и скорость реакции бота.
Сообщение отредактировал Storm54 - Среда, 12 Марта 2014, 22:48 |
|
| |
seaman | Дата: Среда, 12 Марта 2014, 22:59 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Цитата реализовать зону видимости бота в виде прямой треугольной призмы. Если да, то проверять с такой призмой все объекты - бессмысленно. Почему? Создаешь модель призмы в максе, например. Экспортируешь. Создаешь пустышку в Юнити. Прицепляешь к ней мешколлайдер. Указываешь меш - твою модель призмы. Указываешь что она конвекс и изтриггер. Создаешь скрипт с ОнТриггерЭнтер, в котором делаешь что надо.
|
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 23:04 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Не указал такой вариант, потому что это в корне неправильно. Например, если нужно во время игры изменять угол обзора бота, дальность видимости бота и другие факторы. Призма может попросту не вписаться. К тому же это работает не так уж и быстро. Особенно, если ботов много.
|
|
| |
DantorS | Дата: Среда, 12 Марта 2014, 23:13 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Есть причины по которым raycast не следует использовать. Нужна четкая пирамида Добавлено (12.03.2014, 23:13) --------------------------------------------- А как обрубить пирамиду если она упирается в стену?
|
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 23:14 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Значит используй способ seaman. Его проще всего реализовать. Цитата А как обрубить пирамиду если она упирается в стену? Никак. Получаешь все точки пересечения пирамиды с игроком. Потом к каждой из них пускаешь луч. Если все лучи уперлись в стену, значит игрок за стеной.
Сообщение отредактировал Storm54 - Среда, 12 Марта 2014, 23:16 |
|
| |
DantorS | Дата: Среда, 12 Марта 2014, 23:17 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Если никак, то бот будет обнаруживать игрока даже за стеной
Сообщение отредактировал DantorS - Среда, 12 Марта 2014, 23:17 |
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 23:19 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Цитата Если никак, то бот будет обнаруживать игрока даже за стеной Советую дочитать до конца.
|
|
| |
DantorS | Дата: Среда, 12 Марта 2014, 23:22 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Storm54, раз ты читал мои темы, там была тема про процентное соотношение(я ещё тебе в лс писал). Один человек предложил вариант(ещё рисунок нарисовал) использовать несколько пирамид(для обнаружения по процентам) Добавлено (12.03.2014, 23:21) ---------------------------------------------
Цитата Storm54 ( ) Советую дочитать до конца. Я до читал, пирамида всё равно не будет обрубатьсяДобавлено (12.03.2014, 23:22) --------------------------------------------- http://gcup.ru/forum/59-38037-2
|
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 23:28 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Цитата Один человек предложил вариант(ещё рисунок нарисовал) использовать несколько пирамид(для обнаружения по процентам) Мое сообщение чуть выше: Цитата Проще сравнить угол поворота бота с игроком. Если бот смотрит на игрока, то уже пускать до него обычные лучи, дабы отследить препятствия на пути к игроку. Я писал тоже самое, только не настолько подробно. Смысл тот же. В общем ответы уже были даны и даны не один раз. Причем предложена была масса вариантов. Советую хотя бы один из них попробовать на практике.
Сообщение отредактировал Storm54 - Среда, 12 Марта 2014, 23:29 |
|
| |
DantorS | Дата: Среда, 12 Марта 2014, 23:31 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Как определить находится ли ГГ в лучах. (Как рисунке из темы: если он находится в промежутке между красной и черной линией то тото, если между черной и зеленной то тото)
|
|
| |
Storm54 | Дата: Среда, 12 Марта 2014, 23:39 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Сравнивая углы. Здесь идет общая проверка видимости AI. Код // направление на игрока Vector3 playerDirection = (_playerTransform.position - _thisTransform.position).normalized; // половина угла видимости var halfAngle = visibleAreaAngle / 2;
// если угол между направлением врага и направлением на игрока входит в область видимости if (Vector3.Angle(transform.forward, playerDirection) <= halfAngle) { // то начинаем преследование }
Можешь почитать статью целиком. Статья
|
|
| |
DantorS | Дата: Среда, 12 Марта 2014, 23:43 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Спасибо. Как сразу не дошло: углы.-, Наверное мыслю как то "в лоб"
|
|
| |