Страница 1 из 1

Игнорирование Raycast когда кликаем на GUI

СообщениеДобавлено: 08 июл 2011, 20:47
asterkhov
Есть следующая проблема:
Имеется код обработки движения персонажа по террайну по клику мыши (данный код в скрипте камеры в функции Update):
Синтаксис:
Используется csharp
           
if (Input.GetKeyDown("mouse 0") && (SelectedPlayer.CurrentStatus == Player.PlayerStatus.Idle))
{
  Ray ray = camera.ScreenPointToRay(Input.mousePosition);
  RaycastHit hit;

  if (Physics.<span class="posthilit">Raycast</span>(ray, out hit, 1000F))
  {
      if(SelectedPlayer != null && hit.transform.CompareTag("Ground"))
      {
         SelectedPlayer.MoveTo(hit.point, true);  
      }
  }
}
 


Так же имеется обработка GUI элементов в других скриптах в функциях OnGUI().
так вот когда мы кликаем по какой либо кнопке или другому элементу GUI, то так же обрабатывается и код передвижения персонажа (см. выше).
Каким образом можно игнорировать Physics.Raycast если мы кликнули по GUI?

Есть пара мыслей, например в OnGUI выставлять флаг что кликнули по гуям и соответственно в скрипте камеры проверять этот флаг, но тут вопрос что раньше обрабатывается OnGUI или Update. Вариант второй, обрабатывать (пока не знаю как) то что курсор находится над гуями что типа OnHover и тоже выставлять соответсвующий флаг.

Вообщем если кто сталкивался с подобной проблемой, поделитесь кто и как ее решал?

Re: Игнорирование Raycast когда кликаем на GUI

СообщениеДобавлено: 08 июл 2011, 21:46
Lestar
OnMouseEnter и меняем флаг или обьекты бросаем в слой ignore raycast.

Re: Игнорирование Raycast когда кликаем на GUI

СообщениеДобавлено: 08 июл 2011, 22:19
Zaicheg
Тут обсуждалось и ещё в каких-то темах:
viewtopic.php?f=12&t=1831

В последний раз я просто использовал такую схему:
foreach (Rect rect in links.guiManager.rects)
if (rect.Contain(mousePos))
isGUIClick = true;

Re: Игнорирование Raycast когда кликаем на GUI

СообщениеДобавлено: 09 июл 2011, 09:27
Neodrop
Вот вам подарочек : viewtopic.php?f=66&t=4886 %%-