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

Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 17:19
Wadimir
Добрый день!
Есть скрипт:
...
void OnMouseDrag()
{
Debug.Log("drag");
}
...


если применить этот скрипт к gameObject на сцене, метод отрабатывает.

Но как вызвать OnMouseDrag у gameObject не применяя скрипт на объект? Скрипт лежит в ассетах, нужный gameObject получаю через Find.

...
go = GameObject.Find("go");
...

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 17:39
Tolking
Public перед void поставь и вызывай...

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 18:17
Wadimir
мне нужен доступ не с наружи, а доступ к OnMouseDrag объекта go. Может нужно добавить слушатель события на OnMouseDrag к go. Суть в том, чтоб создать приложение в котором скрипты вообще не будут цеплятся к объектам, а объекты будут обрабатываться только через скрипт (в рантайме)

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 19:29
Tolking
То, что лежит в асетах не существует в памяти и его нужно создать... Причем OnMouseDrag - часть MonoBehaviour который нельзя создать. Его можно только прикрепить к go...

Вобщем непонятно... Если на go нет скриптов, то на нем нет и OnMouseDrag от куда и к чему нужен доступ?

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 20:24
Wadimir
У меня на сцене лежит куб с названием go. Я создаю скрипт в ассетах CubeComponent. Наследуюсь от MonoBehaviour. В методе Start достаю этот компонент со сцены:

go = GameObject.Find("go");


CubeComponent инициализирую из другого класса:

GameObject gameObject = new GameObject("CubeComponent");
CubeComponent сubeComponent= gameObject.AddComponent<CubeComponent>();


Как мне теперь ловить событие OnMouseDrag от объекта go?

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 15 фев 2020, 23:25
seaman
Как мне теперь ловить событие OnMouseDrag от объекта go?

Повесить скрипт на go...

Вы бы подумали как вообще и кто такие события вызывает- вопросов было бы меньше.

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 11:19
Wadimir
я так понимаю, вы не знаете как такое реализовать...

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 11:41
1max1
я так понимаю, вы не знаете как такое реализовать...

Никак.
Конкретно OnMouseDrag это колбек, так же как и OnTriggerEnter и т.д.
Они дергаются только когда скрипт висит на объекте, то есть они обязательно должны быть привязаны к объекту.
Ты можешь реализовать свой метод, который будет, к примеру, рейкастить и получать объект.
И да, хотя бы 1 управляющий скрипт на сцене у тебя будет, иначе где ты собрался вызвать Update? Это же тоже колбек от монобеха)
Хотя наверное можно в EditorApplication.update запихнуть, но в билде это не будет работать.

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 12:58
Wadimir
Хм... а может как то можно добавить на куб компонент Event или EventTrigger и уже ловить в скрипте эти события от объекта?

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 13:37
Tolking
Это то же самое, что и скрипт - они получают события. Максимум что можно сделать в обработке события - сообщить о наступлении этого события. Но практической пользы в этом нет. Просто увеличение количества кода... Проще просто в обработчике события вызывать нужный обработчик события...

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 13:37
1max1
Wadimir писал(а):Хм... а может как то можно добавить на куб компонент Event или EventTrigger и уже ловить в скрипте эти события от объекта?

EventTrigger только для юи вроде как, и это тоже скрипт) Может лучше не изобретать велосипед?

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 14:41
Wadimir
Для маленьких проектов подход вешания скриптов на объекты хорош. Но вот для больших проектов, процесс дебага и поиска ошибок, будет очень сложным.
Если провести аналогии (я понимаю, что юнити это другое) во флеше тоже можно было писать код прямо на MovieClip и в кадрах, но это очень усложняло поддержку. Вот когда всё обрабатывалось в классах, это было другое дело. Я думаю, что в юнити, всё таки, можно применить такой же подход, навешивать свойства на объекты в сцене, а всё остальное делать кодом

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 15:41
Tolking
В Юнити все обробатывается в классах...

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 15:50
1max1
Wadimir писал(а):Для маленьких проектов подход вешания скриптов на объекты хорош. Но вот для больших проектов, процесс дебага и поиска ошибок, будет очень сложным.
Если провести аналогии (я понимаю, что юнити это другое) во флеше тоже можно было писать код прямо на MovieClip и в кадрах, но это очень усложняло поддержку. Вот когда всё обрабатывалось в классах, это было другое дело. Я думаю, что в юнити, всё таки, можно применить такой же подход, навешивать свойства на объекты в сцене, а всё остальное делать кодом

Похоже на ECS.

Re: Доступ к OnMouseDrag в runtime

СообщениеДобавлено: 16 фев 2020, 18:49
seaman
а всё остальное делать кодом

МоноБихевиор, навешиваемый на ГО - тоже код (внезапно :) )
Похоже на ECS.

Похоже на MVC.
Контроллер может быть не МоноБихевиор.