Обновление Antares.dllНомерация начата заново. Теперь это будет версия 1.4
Итак :
(Antares.dll качаем в первом посте этого топика (внизу, после видео). Демка DirectCall упакована вместе с dll)
Визуальная система Прямых Сообщений (DirectMesseges).
В 8 раз быстрее методов SendMessage
Визуальная настройка.
Простота использования.
ВНИМАНИЕ!
Antares.Manager и
AntaresDirectCall совершенно разные классы и они никак не пересекаются, помимо того, что относятся к одному
namespace (Antares) Добавлен класс
DirectCallРаботать с ним не нужно, в архиве Antares.dll приложена демка использования нового класса и паккадж, содержащий Antares.dll, Messenger.cs и DirectCall_Editor.cs
Messenger.cs - MonoBehaviour компонент, который можно добавить на объект руками или командой меню
Antares->Component->Add Messenger Пройдём шаг за шагом.
У нас есть объект, в какие-то методы (функции) какого то из его скриптов, мы хотим послать вызов или передать данные.
Добавили компонент, видим пустой параметр Target. Кидаем туда объект, к методам которого хотим обратиться.
Теперь мы видим, что появился список всех монобехов, находящихся на этом объекте (в нашем примере только одиню Это скрипт Waiter.cs).
Выбираем его и видим список методов (функций.)
Нас интересуют два метода :
ResetColorToMaterial и
SetColorToMaterial Mы можем оставить их имена как есть, а можем изменить на то, что нам более по душе.
Зачем писать лишнего? Я выбираю более короткие имена :
Отлично! Осталось написать пару строчек кода и ключик у нас в кармане.
Обратимся к скрпиту
Sender.cs В нем, мы должны ввести параметр типа Messenger
Конечно, мы можем найти компонент через GetComponent<>, но, вдруг у вас будет более одного Messenger на одном Го ?
Поэтому я ввёл публичную переменную, с тем, чтобы просто перетащить на неё компонент прямо в Редакторе.
Остался последний штрих! Нам нужно вызвать
Message.SendMessageDirect, чтобы послать нашу мессагу :
- Код: Выделить всё
void Window(int windowID)
{
if (GUILayout.Button("RED", GUILayout.Width(128)))
messenger.SendMessageDirect("SetColor", Color.red);
if (GUILayout.Button("YELLOW", GUILayout.Width(128)))
messenger.SendMessageDirect("SetColor", Color.yellow);
if (GUILayout.Button("GREEN", GUILayout.Width(128)))
messenger.SendMessageDirect("SetColor", Color.green);
if (GUILayout.Button("RESET", GUILayout.Width(128)))
messenger.SendMessageDirect("ResetColor", Color.green);
GUI.DragWindow();
}
Как видим, всё элементарно и ничем практически не отличается от SendMessage
Единственный минус - принимающая функция, если она ждёт передачу данных, должна принимать тип
objectПример :
- Код: Выделить всё
protected void SetColorToMaterial(object col)
{
renderer.material.color = (Color)col;
}
Если кто-то мне подскажет, как универсально передать через делегаты произвольный тип переменной, буду очень признателен и исправлю это маленькое неудобство.
Всё. Жмакаем Play и видим, как всё работает.