Доступ к OnMouseDrag в runtime

Программирование на Юнити.

Доступ к OnMouseDrag в runtime

Сообщение Wadimir 15 фев 2020, 17:19

Добрый день!
Есть скрипт:
...
void OnMouseDrag()
{
Debug.Log("drag");
}
...


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

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

...
go = GameObject.Find("go");
...
Wadimir
UNец
 
Сообщения: 11
Зарегистрирован: 15 фев 2020, 17:08

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

Сообщение Tolking 15 фев 2020, 17:39

Public перед void поставь и вызывай...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение Wadimir 15 фев 2020, 18:17

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

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

Сообщение Tolking 15 фев 2020, 19:29

То, что лежит в асетах не существует в памяти и его нужно создать... Причем OnMouseDrag - часть MonoBehaviour который нельзя создать. Его можно только прикрепить к go...

Вобщем непонятно... Если на go нет скриптов, то на нем нет и OnMouseDrag от куда и к чему нужен доступ?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение Wadimir 15 фев 2020, 20:24

У меня на сцене лежит куб с названием go. Я создаю скрипт в ассетах CubeComponent. Наследуюсь от MonoBehaviour. В методе Start достаю этот компонент со сцены:

go = GameObject.Find("go");


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

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


Как мне теперь ловить событие OnMouseDrag от объекта go?
Wadimir
UNец
 
Сообщения: 11
Зарегистрирован: 15 фев 2020, 17:08

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

Сообщение seaman 15 фев 2020, 23:25

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

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

Вы бы подумали как вообще и кто такие события вызывает- вопросов было бы меньше.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение Wadimir 16 фев 2020, 11:19

я так понимаю, вы не знаете как такое реализовать...
Wadimir
UNец
 
Сообщения: 11
Зарегистрирован: 15 фев 2020, 17:08

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

Сообщение 1max1 16 фев 2020, 11:41

я так понимаю, вы не знаете как такое реализовать...

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

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

Сообщение Wadimir 16 фев 2020, 12:58

Хм... а может как то можно добавить на куб компонент Event или EventTrigger и уже ловить в скрипте эти события от объекта?
Wadimir
UNец
 
Сообщения: 11
Зарегистрирован: 15 фев 2020, 17:08

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

Сообщение Tolking 16 фев 2020, 13:37

Это то же самое, что и скрипт - они получают события. Максимум что можно сделать в обработке события - сообщить о наступлении этого события. Но практической пользы в этом нет. Просто увеличение количества кода... Проще просто в обработчике события вызывать нужный обработчик события...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение 1max1 16 фев 2020, 13:37

Wadimir писал(а):Хм... а может как то можно добавить на куб компонент Event или EventTrigger и уже ловить в скрипте эти события от объекта?

EventTrigger только для юи вроде как, и это тоже скрипт) Может лучше не изобретать велосипед?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Wadimir 16 фев 2020, 14:41

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

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

Сообщение Tolking 16 фев 2020, 15:41

В Юнити все обробатывается в классах...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение 1max1 16 фев 2020, 15:50

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

Похоже на ECS.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение seaman 16 фев 2020, 18:49

а всё остальное делать кодом

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

Похоже на MVC.
Контроллер может быть не МоноБихевиор.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 10