Пятница, 29 Ноября 2024, 20:44

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
OnTriggerEnter и высокая скорость
dreenlineДата: Пятница, 09 Декабря 2016, 14:52 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Привет! У меня есть рыцарь. Он машет мечем с высокой скорость. Если меч попадает по противнику, то противник умирает. Но из-за того, что скорость высокая, бывает так, что OnTriggerEnter не срабатывает. На сколько я понимаю, что между кадрами меч проходит сквозь противника. Как это исправить? На противниках у меня стоит ригидбоди и скрипт. Если противник соприкасается с мечом, то он умирает.
p.s. пробовал на ригидбоди ставить continuous,не помогает, да и вроде как после этого производительность упала
SnakeRДата: Пятница, 09 Декабря 2016, 15:50 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
dreenline, если очень хочется делать такое на физике, уменьшай в настройках время между физ просчетами, но это тоже повлияет на производительность.

Unity3D Developer
Ваш лучший помощник при разработке в Unity3D
andarkyДата: Пятница, 09 Декабря 2016, 15:52 | Сообщение # 3
старожил
Сейчас нет на сайте
у меня тоже была проблема такая же и я решил её таким образом:
просто принял баг как есть, смирился с этим



Моя страничка по дизайну
GameDev//Design//3D
Ютубчик
dreenlineДата: Пятница, 09 Декабря 2016, 15:56 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
andarky, это не ывход

Добавлено (09 декабря 2016, 15:56)
---------------------------------------------
SnakeR, а как можно это сделать не на физике? Можешь дать наводку?

SnakeRДата: Пятница, 09 Декабря 2016, 17:26 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
dreenline, ну можно делать на райкастах, запуская луч в определенный момент анимации к примеру.

Unity3D Developer
Ваш лучший помощник при разработке в Unity3D
dreenlineДата: Пятница, 09 Декабря 2016, 20:50 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
SnakeR, точно. Буду пробовать пускать райкаст из центра персонажа на маленькое расстояние, и если райкаст будет видеть противника и вместе с этим проихводится удар, то противник будет уничтожаться, или что-то типо того
Kot-MatroskinДата: Суббота, 10 Декабря 2016, 01:33 | Сообщение # 7
был не раз
Сейчас нет на сайте
Попробуй вместо Update() использовать FixedUpdate() в некоторых случаях помогает.

Сообщение отредактировал Kot-Matroskin - Суббота, 10 Декабря 2016, 01:33
dreenlineДата: Суббота, 10 Декабря 2016, 16:50 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Цитатаdreenline ()
Буду пробовать пускать райкаст из центра персонажа на маленькое расстояние, и если райкаст будет видеть противника и вместе с этим проихводится удар, то противник будет уничтожаться, или что-то типо того

Это будет не правильно. Нужно что бы меч задевал врагов не только перед собой, но и справа и слева от себя(в зависимости от того, в какую сторону будет наноситься удар).
Тогда можно делать, что бы рейкаст стрелялся, например, из рукояти меча и вдоль меча. Но можно ли так сделать? Должно получиться что-то типо этого?
Код
Vector3 fwd = raycastObject.transform.TransformDirection(Vector3.forward);
     Debug.DrawRay(raycastObject.transform.position, fwd * 1, Color.green);
     if (Physics.Raycast(raycastObject.transform.position, fwd, out objectHit, 1))
     {
if(objectHit.name=="Enemy"){
Destroy(objectHit.gameObject)
}


Сообщение отредактировал dreenline - Суббота, 10 Декабря 2016, 17:00
seamanДата: Суббота, 10 Декабря 2016, 17:54 | Сообщение # 9
старожил
Сейчас нет на сайте
Цитата
Это будет не правильно.

Смотря как пускать луч.
Пуская три луча в направлении движения меча. - на трети, на двух третях и в кончике меча. Тогда все отследишь без вариантов.
PS^ Вдоль меча - это лажа.
PPS^ человек махать мечом может с ограниченной скоростью. У Вас не человек, а нечто более крутое?
dreenlineДата: Суббота, 10 Декабря 2016, 19:00 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
Цитатаseaman ()
PS^ Вдоль меча - это лажа.

Почему?
Цитатаseaman ()
PPS^ человек махать мечом может с ограниченной скоростью. У Вас не человек, а нечто более крутое?

ниндзи... они такие :)
Kot-MatroskinДата: Воскресенье, 11 Декабря 2016, 23:55 | Сообщение # 11
был не раз
Сейчас нет на сайте
Кстати как вариант пусть он махнёт пару или более (то-есть один удар будет состоять из серии пока не сработает триггер) раз, пока не зацепит, на той скорости я так понимаю это игроку не будет заметно. А удар гарантированно зацепит.
dreenlineДата: Среда, 14 Декабря 2016, 21:18 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
Kot-Matroskin, это раннер, надо что бы все время срабатывало.
Нифига не помогает. Делал удар мечом через анимацию. Скорость анимации выставил 80, т.к. удар должен быть быстрым(примерно 0.1 сек). Видать придется ставить большие коллайдеры.
Цитата seaman ()
Пуская три луча в направлении движения меча. - на трети, на двух третях и в кончике меча. Тогда все отследишь без вариантов.

Это тоже не срабатывает.

Добавлено (14 декабря 2016, 18:42)
---------------------------------------------
Рейкаст тоже работает плохо. Т.к. у меня у некоторых врагов жизней на два удара. С рейкастом их убивает с одного. Или в двух. Или с 3х. Как пойдет в общем.
Вот кусок кода, не знаю зачем. Но может подскажете что-то.

Добавлено (14 декабря 2016, 21:18)
---------------------------------------------
Может попробовать сделать 3 бокс коллайдера-триггера перед персонажем. И когда просиходит удар влево, включается центральный и левый бокс коллайдер, а когда удар вправо - соответственно центральный и правый?

Сообщение отредактировал dreenline - Среда, 14 Декабря 2016, 18:43
OtinagiДата: Четверг, 15 Декабря 2016, 08:40 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Не совсем понял, как вы обрабатываете коллизию.

Если физической моделью меча, то 100500 лет назад я для определения столкновение снаряда с танком использовал цылиндр в качестве физической модели, а не шар. В итоге всегда всё сталкивалось. А в вашем случае можно сделать какой-нибудь сектор и его махать вместе с мечом.

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


«Смерти меньше всего боятся те люди, чья жизнь имеет наибольшую ценность.»
Иммануил Кант
dreenlineДата: Четверг, 15 Декабря 2016, 12:57 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Цитата Otinagi ()
Не совсем понял, как вы обрабатываете коллизию

Я пытался стандартными методами, через OnTriggerEnter, и через raycast. Raycast кстати тоже иногда мимо проходит. Есть какой-нибудь способ обрабатывать кусок кода между кадрами?
ReanДата: Четверг, 15 Декабря 2016, 13:24 | Сообщение # 15
участник
Сейчас нет на сайте
dreenline, а почему бы не сделать просто по-старинке: проверить участок (область) перед персонажем в момент атаки?
По типу:
Код

Если (состояниеПерсонажа == атака И коллайдерАтаки == есть_пересечение)
   коллайдерАтаки.объектПересечения.Повредить();

Ты вроде выше о подобном говорил. Мне кажется, что это самый оптимальный вариант. Тем более, если атака происходит быстро, что даже компьютер не успевает зафиксировать коллизию меча, то глаз уж тем более не заметит. Отсюда и надо плясать: чего не видно, того не делаем :)

Цитата dreenline ()
Есть какой-нибудь способ обрабатывать кусок кода между кадрами?

Для этих целей тебе это точно не надо. Делай с триггерами и всё будет пучком)
dreenlineДата: Понедельник, 19 Декабря 2016, 03:11 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Rean, я думаю так и придется сделать. Сейчас еще попробую с лайнкастом, и если не пойдет то буду так

Добавлено (19 декабря 2016, 03:11)
---------------------------------------------
В общем, вроде решил проблему с использованием лайнкаста. Сделал вдоль меча два лайнкаста, что бы ну никак враги не могли пройти мимо них. Пока, вроде, все работает.

  • Страница 1 из 1
  • 1
Поиск:

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