У меня есть класс CollisionHandler
, у которого есть метод OnCollisionEnter
.Каждая встречная сущность в игре имеет CollisionHandler
в качестве компонента.Таким образом, когда сталкиваются 2 объекта, метод OnCollisionEnter
вызывается дважды , и это нормально, потому что повреждение и другие вещи обрабатываются в результате прикосновения к объекту "B" объектом "A" и наоборот.
Кроме того, каждое столкновение создает эффект вспышки и воспроизводит звук удара, и, конечно, эти эффекты также воспроизводятся дважды для каждого столкновения.Хотя это не было бы незаметно для игрока, в любом случае это не совсем правильно.Чтобы предотвратить это, я придумал следующее решение: я сохраняю текущий номер кадра у другого участника столкновения, чтобы он знал, что эти эффекты уже были воспроизведены первым.
private void OnCollisionEnter(Collision collision)
{
// Calculate the damage caused by `this.gameObject` to `collision.gameObject`.
// ...
// Play an impact sound and show a visual effect.
if (thisObject.CollisionFrameId != Time.frameCount)
{
otherObject.CollisionFrameId = Time.frameCount;
// play sound
// show hit effect
}
}
Хотя это работает, я не уверен (я новичок в Unity), что это лучшая практика, и если да, пожалуйста, предложите другие возможные решения.
Обратите внимание, что я не сделал «Почему OnCollisionEnter вызывается дважды?» .Я знаю, почему это происходит.Мой вопрос касается другого, хотя в нем упоминается имя той же функции, которое он не запрашивает.