Понедельник, 11 Ноября 2024, 03:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Свой 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
заслуженный участник
Сейчас нет на сайте
Спасибо. Как сразу не дошло: углы.-, Наверное мыслю как то "в лоб"
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг