Size: a a a

2020 June 11

DK

Dmitriy Ka in unity3d.ru
Привет
Товарищи, два вопроса.
1. У меня есть враг-турель. Она в FixedUpdate (для экономии, как я думаю, нет смысла каждый фрейм вызывать) проверяет дистанцию в сторону игрока и если она больше Х - "возбуждается". Вопрос, нормально ли это ? Может лучше игроку присобачить рейкаст сферой и находя коллайдеры в слое "враги" посылать им сигнал "хеллоу, я туть!" ?
2. ИИ турели сделать более менее просто. А как сделать нормальный ИИ для допустим танка. Который ездит -туда сюда, а заметив игрока изменяет свое поведение (опять же, если он тупо попытается его головой таранить, это будет странно, нужно чтобы маневрировал и стрелял)
ссылки на хорошие материалы приветствуются
источник

F

Fun'Da'Mental in unity3d.ru
jesjee
Привет, только изучаю Unity и есть некоторые вопросы, как манипулировать положением объекта в иерархии, тобишь добавлять детей, убирать и тд. Как получить экземпляр объекта и как правильно обращаться к объекту GameObject и его компонентам, я не совсем понимаю как они устроены в коде самого движка. Будет здорово если кто-то прояснит
Каждый геймобжект имеет имеет transform, через который контролируется его положение на сцене и в иерархии. В частности есть transform.parent, который определяет какой объект является родительским по отрошению к этому. Оно может быть приравнено null, тогда объект будет просто в корне иерархии сцены.
еще есть transform.childCount и transform.GetChild(). В общем изучи справку про GameObject.transform, там много полезного. трансформы база для оперирования положением
источник

VL

Vlad Lutai in unity3d.ru
Dmitriy Ka
Привет
Товарищи, два вопроса.
1. У меня есть враг-турель. Она в FixedUpdate (для экономии, как я думаю, нет смысла каждый фрейм вызывать) проверяет дистанцию в сторону игрока и если она больше Х - "возбуждается". Вопрос, нормально ли это ? Может лучше игроку присобачить рейкаст сферой и находя коллайдеры в слое "враги" посылать им сигнал "хеллоу, я туть!" ?
2. ИИ турели сделать более менее просто. А как сделать нормальный ИИ для допустим танка. Который ездит -туда сюда, а заметив игрока изменяет свое поведение (опять же, если он тупо попытается его головой таранить, это будет странно, нужно чтобы маневрировал и стрелял)
ссылки на хорошие материалы приветствуются
А че нельзя поставить тригер на турель?
источник

F

Fun'Da'Mental in unity3d.ru
jesjee
Привет, только изучаю Unity и есть некоторые вопросы, как манипулировать положением объекта в иерархии, тобишь добавлять детей, убирать и тд. Как получить экземпляр объекта и как правильно обращаться к объекту GameObject и его компонентам, я не совсем понимаю как они устроены в коде самого движка. Будет здорово если кто-то прояснит
для обращения к своим объектам ты либо заранее делаешь поле, например public GameObject myCharacter; оно появляется в пользовательском интерфейсе вс прикрепленном скрипте и ты перетягиваешь туда объект из иерархии

либо ищешь объект в рантайме, для этого есть всякие GameObject.Find и GetComponent их разных много, для поиска по имени или тегу, по типу, один или все, только в иерархи объекта и т.п.
источник

DK

Dmitriy Ka in unity3d.ru
Vlad Lutai
А че нельзя поставить тригер на турель?
т.е.? Присобачить ей сферу-коллайдер с trigger=True?
источник

VL

Vlad Lutai in unity3d.ru
Dmitriy Ka
т.е.? Присобачить ей сферу-коллайдер с trigger=True?
Да
источник

VL

Vlad Lutai in unity3d.ru
Активировать при входе обьекта в триггер, и деактивировать при выходе
источник

TS

Timofei Shibaev in unity3d.ru
FliXis
Так это...вроде как все, что связано с воздействием на rigidbody надо писать в фиксед. Но при этом туда нельзя пиcать инпут. Как тогда правильно реализовывать управление? Городить какие-то костыли с bool в теле фиксед?
Всё, что тебе нужно тут, и никакие bool городить не придется
источник

DK

Dmitriy Ka in unity3d.ru
не знаю, честно говоря. Так она и на другие триггер-объекты будет реагировать тогда, понято пропуская всех кроме игрока. Но если например в сфере будет лава у которой коллайдер триггер - она будет ее каждый апдейт теребить.
Да и вроде как сфера-коллайдер более затратный способ. Вот тут я не уверен вообще, не знаю как проверить
источник

F

Fun'Da'Mental in unity3d.ru
Dmitriy Ka
Привет
Товарищи, два вопроса.
1. У меня есть враг-турель. Она в FixedUpdate (для экономии, как я думаю, нет смысла каждый фрейм вызывать) проверяет дистанцию в сторону игрока и если она больше Х - "возбуждается". Вопрос, нормально ли это ? Может лучше игроку присобачить рейкаст сферой и находя коллайдеры в слое "враги" посылать им сигнал "хеллоу, я туть!" ?
2. ИИ турели сделать более менее просто. А как сделать нормальный ИИ для допустим танка. Который ездит -туда сюда, а заметив игрока изменяет свое поведение (опять же, если он тупо попытается его головой таранить, это будет странно, нужно чтобы маневрировал и стрелял)
ссылки на хорошие материалы приветствуются
для таких целей можно у турели сфериеский коллайдер-триггер использовать, физика тоже в фиксед апдейт считается плюс коллайдеры как-то по своему делят пространство,чтобы определять необходимость расчета, как я понимаю
источник

VL

Vlad Lutai in unity3d.ru
Dmitriy Ka
не знаю, честно говоря. Так она и на другие триггер-объекты будет реагировать тогда, понято пропуская всех кроме игрока. Но если например в сфере будет лава у которой коллайдер триггер - она будет ее каждый апдейт теребить.
Да и вроде как сфера-коллайдер более затратный способ. Вот тут я не уверен вообще, не знаю как проверить
Можешь игнорить коллайдеры
источник

VL

Vlad Lutai in unity3d.ru
Во всяком случае это лучше чем ты будешь трекать в апдейте
источник

F

Fun'Da'Mental in unity3d.ru
Dmitriy Ka
не знаю, честно говоря. Так она и на другие триггер-объекты будет реагировать тогда, понято пропуская всех кроме игрока. Но если например в сфере будет лава у которой коллайдер триггер - она будет ее каждый апдейт теребить.
Да и вроде как сфера-коллайдер более затратный способ. Вот тут я не уверен вообще, не знаю как проверить
да просто пусть проверяет тег на "Player"
источник

F

Fun'Da'Mental in unity3d.ru
gameObject.CompareTag("Player")
источник

DK

Dmitriy Ka in unity3d.ru
Хм, выходит сфера-триггер наиболее эффективная практика?
источник

j

jesjee in unity3d.ru
Fun'Da'Mental
для обращения к своим объектам ты либо заранее делаешь поле, например public GameObject myCharacter; оно появляется в пользовательском интерфейсе вс прикрепленном скрипте и ты перетягиваешь туда объект из иерархии

либо ищешь объект в рантайме, для этого есть всякие GameObject.Find и GetComponent их разных много, для поиска по имени или тегу, по типу, один или все, только в иерархи объекта и т.п.
Спасибо за информацию! Я так сделал, а потом пытался удалить через Destroy и была ошибка, потому что пытался удалить префаб а не сам объект.
источник

TS

Timofei Shibaev in unity3d.ru
Dmitriy Ka
не знаю, честно говоря. Так она и на другие триггер-объекты будет реагировать тогда, понято пропуская всех кроме игрока. Но если например в сфере будет лава у которой коллайдер триггер - она будет ее каждый апдейт теребить.
Да и вроде как сфера-коллайдер более затратный способ. Вот тут я не уверен вообще, не знаю как проверить
сфера - самый производительный коллайдер, так как нужен только радиус и позиция, капсула и куб на ~30% медленнее, а меш сами понимаете
источник

МР

Михаил Рыбкин... in unity3d.ru
Fun'Da'Mental
для обращения к своим объектам ты либо заранее делаешь поле, например public GameObject myCharacter; оно появляется в пользовательском интерфейсе вс прикрепленном скрипте и ты перетягиваешь туда объект из иерархии

либо ищешь объект в рантайме, для этого есть всякие GameObject.Find и GetComponent их разных много, для поиска по имени или тегу, по типу, один или все, только в иерархи объекта и т.п.
"GameObject.Find" - Не учи плохому.
источник

TS

Timofei Shibaev in unity3d.ru
но иногда меш лучше, чем несколько примитивов
источник

F

Fun'Da'Mental in unity3d.ru
jesjee
Спасибо за информацию! Я так сделал, а потом пытался удалить через Destroy и была ошибка, потому что пытался удалить префаб а не сам объект.
если делаешь Resources.Load() as GameObject, то он грузит префаб, да, надо сразу делать Instantiate ()
источник