Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

Обратный вызов из собственного кода

Unity iOS поддерживает ограниченную функциональность обратного вызова от основного к управляемому с помощью одного из следующих методов:

Используйте UnitySendMessage

UnitySendMessage выглядит так:

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");

Существуют три параметра:

  • Имя цели GameObject
  • Метод скрипта для вызова этого объекта
  • Строка сообщения для передачи вызываемому методу

UnitySendMessage имеет следующие ограничения:

  1. Из собственного кода можно вызывать только методы скриптов, соответствующие следующей подписи: void MethodName(string message);.
  2. Вызовы UnitySendMessage являются асинхронными и имеют задержку в один кадр.
  3. Если два или более GameObjects имеют одно и то же имя, это может вызвать конфликты при использовании UnitySendMessage.

Использование делегатов

При работе с делегатами метод на стороне C# должен быть статическим и помеченным MonoPInvokeCallback атрибут.

Чтобы использовать делегатов:

  1. Передайте метод как делегат внешнего метода.
  2. Реализуйте метод extern в нативном коде как функцию, которая принимает указатель на функции с соответствующей подписью.

Указатель на функцию в нативном коде затем ссылается обратно на статический метод в C#.

Код C# для этого метода выглядит следующим образом:

delegate void MyFuncType();

[AOT.MonoPInvokeCallback(typeof(MyFuncType))]

static void MyFunction() { }

[DllImport ("__Internal")] 

static extern void RegisterCallback(MyFuncType func);

Код на C, который принимает обратный вызов, выглядит следующим образом:

typedef void (*MyFuncType)();

void RegisterCallback(MyFuncType func) {}

Примечание: Убедитесь, что строковые значения, возвращаемые из основного метода, кодируются в UTF–8 и выделены на стеке.

Дополнительные ресурсы