Unity3D Custom Collider

355
02 ноября 2017, 04:28

В Update cтреляем лучом по коллайдеру и получаем у него нужный нам родительский объект.

Physics.Raycast(weapon.position, weapon.forward, out gunsightHit, 200, HitMask);
Collider _col = gunsightHit.collider;

Получаем из него объект

victim = _col.GetComponentInParent<VictimScript>();

И что то с ним делаем.

Вопрос - вышеприведённые методы довольно таки просаживают FPS, так как GetComponent в Update.

Предполагаемое мной решение - сделать к Collider некий AttachedScript,аналогично AttachedRigidbody. Чтобы вместо GetComponent просто написать что то вроде

victim = _col.attachedScript;

Но не нашёл в сети ничего подобного. Как подобное можно реализовать? Чтобы у всех Collider появилось дополнительное поле в редакторе, куда можно поставить какой нибудь объект - для ссылки на него при попадании луча.

Если это крайне труднореализуемо(исходники Unity вроде как закрыты), то подскажите альтернативный способ решения проблемы производительности при применении подобной связки(Raycast->Collider->GetComponent)

Answer 1

Практически точно ничего из этого хорошего не получится.

Можно попробывать написать что-то "лучше" чем GetComponent, но если получится - можно смело пушить это в Unity3d репозиторий.

Подобные проблемы я решал добавлением корутины. Обычно нет требований делать проверки в каждом кадре - можно сделать корутину с необходимым временем обновления (.1f секунды обычно достаточно).

IEnumerator Do()
{
  while (true)
  {
    Physics.Raycast(weapon.position, weapon.forward, out gunsightHit, 200, HitMask);
    var _col = gunsightHit.collider;
    victim = _col.GetComponentInParent<VictimScript>();
    //PROFIT
    yield return new WaitForSeconds(.1f);
  }
}
READ ALSO
Настройка отступов для окна WPF

Настройка отступов для окна WPF

Имеется кастомное окно, но при разворачивании его на весь экран часть содержимого не видно, а также окно разворачивается под пуск, и панель...

420
C# Как вытащить только цифры в int из string?

C# Как вытащить только цифры в int из string?

C# Как вытащить только цифры в int из string ?

468
Cachemode в Gmap.net

Cachemode в Gmap.net

Подобный вопрос уже был на стеке, но ответа на него так никто и не далЕсть приложение на с#, которое должно отображать карту openstreetmap с помощью...

411
Изменение BackgroundImage для элемента button

Изменение BackgroundImage для элемента button

У меня есть кнопка с именем button0Свойство BackgroundImage я задал непосредственно с помощью меню свойств в Visual Studio и теперь по нажатию кнопки хочу...

277