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

Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 30 дек 2017, 19:12
ShockWave2048
Как отследить в редакторе сцены клик по спрайту (2)?
Задача стоит в выборе (Selection.activeGameObject) родительского (1) GameObject.
MonoBehaviour.OnMouseUp() в редакторе я так понял не работает.
Сам спрайт (3) и иерархия на картинке.
Изображение

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 30 дек 2017, 20:47
samana
Если у вас задача выбора именно родительского объекта, то возможно пригодится этот аттрибут https://docs.unity3d.com/ScriptReferenc ... ibute.html

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 30 дек 2017, 22:14
seaman
Editor.OnSceneGUI()

+

Синтаксис:
Используется csharp
     if (Event.current.type != EventType.MouseDown || Event.current.button != 0) return;
     Vector3 screenPosition = Event.current.mousePosition;
     screenPosition.y = Camera.current.pixelHeight - screenPosition.y;
     Ray ray = Camera.current.ScreenPointToRay (screenPosition);
     RaycastHit hit;
     if (Physics.Raycast (ray, out hit))
     {
         //По hit определяем ГО в который кликнули и все что нужно...
         Event.current.Use ();
     }

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 30 дек 2017, 22:26
ShockWave2048
samana писал(а):Если у вас задача выбора именно родительского объекта, то возможно пригодится этот аттрибут https://docs.unity3d.com/ScriptReferenc ... ibute.html

Попробовал, ничего не поменялось в поведение при клике, на 3-й, 4-й раз выбирает GO с самим спрайтом, по кругу, чередует по видимому визуальные объекты под точкой клика, в том числе из корня сцены, без отношения к целевым спрайтам.

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 31 дек 2017, 12:56
ShockWave2048
2 seaman - Спасибо за пример!

Не знаете случаем почему редактор пропускает только на 3-4-й клик по объекту? Перебирает по кругу по моему все объекты под точкой клика.

То есть ваш код срабатывает, но не каждый клик.

Может слушатель должен быть на корневом объекте?

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 01 янв 2018, 13:36
lawsonilka
seaman писал(а):Editor.OnSceneGUI()

+

Синтаксис:
Используется csharp
     if (Event.current.type != EventType.MouseDown || Event.current.button != 0) return;
     Vector3 screenPosition = Event.current.mousePosition;
     screenPosition.y = Camera.current.pixelHeight - screenPosition.y;
     Ray ray = Camera.current.ScreenPointToRay (screenPosition);
     RaycastHit hit;
     if (Physics.Raycast (ray, out hit))
     {
         //По hit определяем ГО в который кликнули и все что нужно...
         Event.current.Use ();
     }

Без выравнивании по y.
Синтаксис:
Используется csharp
Vector3 mousePosition = Event.current.mousePosition;
Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition);
 

Re: Как отследить в редакторе сцены клик по спрайту?

СообщениеДобавлено: 01 янв 2018, 16:09
ShockWave2048
2lawsonilka - спасибо за GUIPointToWorldRay();
Не знаете случайно почему не все клики на объекты в редакторе сцены попадают в OnSceneGUI() ?