Документация по плагину для iOS говорит, что вы можете передавать только строки, используя UnitySendMessage.
Обходной путь может заключаться в создании отображения из строки в объекты текстуры на стороне Objective-C, передав строкуключ через UnitySendMessage, а затем получить объект текстуры с помощью пользовательской функции DllImport.
Объявить карту:
// class field
{
NSMutableDictionary<NSString *, id<MTLTexture>> _textures;
}
// in constructor
_textures = [NSMutableDictionary new];
// in function code
NSString *textureName = @"cookies";
_textures[textureName] = texture; // save MTLTexture for later
UnitySendMessage(CALLBACK_OBJECT, CALLBACK_TEXTURE_READY, textureName);
На стороне C # CreateExternalTexture требуется указатель на объект текстуры типа IntPtr
.Чтобы получить его, вы можете объявить функцию DllImport, которая принимает имя текстуры и возвращает IntPtr
:
[DllImport("__Internal")]
static extern IntPtr GetMetalTexturePointerByName(string textureName);
и реализует ее на стороне iOS следующим образом:
return plugin->_textures[textureName];
Не уверенесли это работает, хотя и с точки зрения того, что ожидает CreateExternalTexture
.
См. также этот пост, парень делает нечто подобное (но наоборот): Преобразование uintptr_t в id