Как сделать пулю, которая при попадании в игрока пролетает дальше?
Казалось бы, можно сделать пулю триггером. Но я не могу. Я пытался делать рикошет пули, когда она была триггером, и у меня не получалось. После неудачных решений в плане создания рикошета я сделал пулю НЕ триггером и написал простенький метод рикошета от стен (collider.gameObject.tag == "Wall").
Получается я НЕ могу сделать пулю триггером, так как метод рикошета работает только с пулями, НЕ являющимися триггерами. (Если вы "подгоните" мне рабочий метод, который меняет velocity у RigidBody2D при OnTriggerEnter2D() для пули в виде рикошета, то я буду очень рад)
В общем... Так как я не могу сделать пулю триггером, я начал баловаться со слоями. Я настроил слои в "Edit->Project Setting...->Physics 2D->Layer Collision Matrix" так, чтобы слой пули (Bullet) игнорировал слой игроков (Player). Ура! Пули проходят сквозь игроков! Но... OnTrigger(Enter/Exit)2D и OnCollision(Enter/Exit)2D не работают, ведь не видят пересечения и столкновения пулей и игроков. А пересечения они не видят потому, что в "Layer Collision Matrix" установлено игнорирование слоя пуль слоем игроков (или наоборот, без разницы, это матрица(таблица)).
Короче вопрос вот в чём:
Как сделать так, чтобы пуля могла пронзить игроков сколько угодно раз? Пуля не должна быть триггером. Игрок не должен быть триггером.
Возможное решение, которое я придумал:
Слои пули и игрока "видят" друг друга и могут сталкиваться. Каждый кадр из пули выпускать луч, длина которого равна расстоянию, которое пуля должна преодолеть за следующий кадр. Если пуля замечает лучём игрока, то выполняется команда Physics2D.IgnoreCollision(bulletCollider, playerCollider) и выполняется соответствующий метод а-ля замена OnCollisionEnter2D. После выхода из текущего игрока (проверка с помощью того же луча) можно опять использовать метод IgnoreCollision, но с третим значением false, чтобы коллайдеры друг друга НЕ игнорировали.
Мне не нравится это решение тем, что оно какое-то... Громоздкое и некрасивое?