Дальность обзора/область видимости
| |
polous | Дата: Вторник, 05 Августа 2014, 11:24 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Люди добрые, подскажите!) [C#; Unity]
Делаю TBS (по типу X-Com и тп). У персонажей должна быть дальность обзора, в пределах которой персонаж способен обнаружить врага. Область видимости персонажа - это сектор круга с переменными радиусом круга и углом сектора. Подскажите, каким образом это можно реализовать в коде? Как я не пытался ввести запрос в поисковике "дальность обзора", "угол обзора", "туман войны", "область видимости", "field of view" и тп - выдается информация по скриптингу камеры и ее настроек или дальности прорисовки местности, что не относится к моей задаче... Кто сталкивался с подобными вопросами, есть идеи по реализации?Добавлено (05.08.2014, 11:24) --------------------------------------------- фактически, мне нужно лишь одно условие - если враг попал в эту область, он виден персонажу и начинается бой, если нет, то все курят, никого не видать. Можно даже самые общие рекомендации дать, чтоб я хоть понял, с чего мне начать в этом вопросе.
|
|
| |
Folleah | Дата: Вторник, 05 Августа 2014, 11:45 | Сообщение # 2 |
Архитектор
Сейчас нет на сайте
| Проверяешь радиус вокруг игрока с помощью этой функции.
Сообщение отредактировал Folleah - Вторник, 05 Августа 2014, 11:45 |
|
| |
polous | Дата: Вторник, 05 Августа 2014, 13:24 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Спасибо!!! сразу пару вопросов: 1) эта функция проверяет вокруг объекта в определенном радиусе наличие другого калайдера... как это сделать в области, отличной от круга? или может как-то запретить срабатывание этой функции при определенных углах? 2) как программно воплотить понятие "видно/не видно" врага? например, используя эту функцию отслеживания в радиусе других калайдеров, как сделать, чтобы вне заданного радиуса объект был invisible, но при при этом существовал и выполнял в свой ход заданные операции - перемещение, поиск врага и прочее?
Добавлено (05.08.2014, 13:24) --------------------------------------------- Renderer.OnBecameVisible(), Renderer.isVisible и Renderer.enabled, наверное, пригодны для 2ого пункта, нужно пробовать
Сообщение отредактировал polous - Вторник, 05 Августа 2014, 13:26 |
|
| |
MANMANA | Дата: Вторник, 05 Августа 2014, 13:29 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Прилепи ты к голове пирамиду (если сложно с пирамидой, используй куб, вытяни как нужно) и проверяй его столкновения с коллайдерами друзей и врагов. Посмотри скриншоты Commandos, там даже визуально это показано. Сразу тебе и направление, куда смотрит персонаж. По мне, сфера больше подходит для определения зоны слышимости. ........................................ ......................................... ................_______.............. .............../|.....o...|.............. ............./ . |....|....|............. ........./\/___|_/_\__|............ .........\/....................... ........_|_........................ ..........|......................... ........./\.......................... ...................................
Видимость/невидимость через renderer.enabled = false; либо gameObject.SetActive(false);
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Вторник, 05 Августа 2014, 13:35 |
|
| |
polous | Дата: Вторник, 05 Августа 2014, 13:55 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| MANMANA, ты крут!) я не догадался до этого) И по поводу зоны слышимости тоже опередил, т.к. это также необходимо будет в дальнейшем. Спасибо!
|
|
| |
MANMANA | Дата: Вторник, 05 Августа 2014, 14:53 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| всегда пожалуйста
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Novatorvlad | Дата: Вторник, 05 Августа 2014, 17:45 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Цитата polous ( ) "дальность обзора", "угол обзора" На хабре есть замечательная статья.
Манипуляция математическими данными гораздо менее затратна в плане ресурсов.
Девбложек
Сообщение отредактировал Novatorvlad - Вторник, 05 Августа 2014, 17:46 |
|
| |
polous | Дата: Вторник, 05 Августа 2014, 18:35 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| Спасибо, статья действительно классная!
Пока вот не особо понимаю, как применить способы, предложенные MANMANA и Novatorvlad, в случае, когда враг по факту находится в области видимости, но при этом пребывает за каким-либо препятствием, полностью скрывающим его. В этом случае, даже при условии, что в программе коллайдер обзорного объекта (например, пирамиды) пересечется с коллайдером врага, он не должен быть обнаружен и бой не должен быть начат.
Правильно ли я мыслю, что здесь нужно применять рэйкаст и проверять между коллайдерами персонажа и врага наличие коллайдера стены, относящейся к другому тэгу нежели коллайдер врага?
Сообщение отредактировал polous - Вторник, 05 Августа 2014, 18:36 |
|
| |
allods | Дата: Вторник, 05 Августа 2014, 18:54 | Сообщение # 9 |
почти ветеран
Сейчас нет на сайте
| кидай рейкасты
|
|
| |
Novatorvlad | Дата: Вторник, 05 Августа 2014, 21:47 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Поддерживаю идею с рейкастами. Это самый простой и наименее трудозатратный способ. Хотя не без изьянов.
Девбложек
|
|
| |
|