#ios #unity3d
#iOS #unity-игровой движок
Вопрос:
Я пытаюсь написать свой первый скрипт Unity. Это код для файла с именем TestPlugin.cs, который находится в Assets / Plugins:
using UnityEngine;
using System.Runtime.InteropServices;
public class TestPlugin : MonoBehaviour
{
[DllImport ("__Internal")]
private static extern int getString ();
public static void Awake () {
print (getString ());
}
}
Это код для двух файлов, которые я импортирую в папку classes сгенерированного проекта xCode:
TestPlugin.h:
#import <Foundation/Foundation.h>
@interface TestPlugin : NSObject
-(int)getString;
@end
TestPlugin.m:
#import "TestPlugin.h"
@implementation TestPlugin
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (int)getString
{
return 7;
}
@end
Наконец, это файл javascript, который находится внутри папки ресурсов.
TestPluginTest.js:
function Update ()
{
TestPlugin.Awake ();
}
Также, пожалуйста, обратите внимание, что я не обязательно ожидаю, что все это сработает, просто для компиляции на этом этапе (хотя дополнительные указания и подсказки приветствуются)
Ошибка, которую я получаю в xCode при попытке сборки на iPhone (фактическое устройство), заключается в следующем:
Неопределенные символы для архитектуры armv7: «_getString», на которые ссылается: RegisterMonoModules() в RegisterMonoModules.o ld: символ (ы) не найден для архитектуры armv7 collect2: ld вернул 1 статус выхода
«_getString», на который ссылается:
RegisterMonoModules() в RegisterMonoModules.o
ld: символы не найдены для архитектуры armv7
collect2: ld вернул статус выхода 1
Я в тупике! Заранее спасибо!
Ответ №1:
Я думаю, что проблема заключается в интерфейсе Obj-C, потому что компоновщик не знает, как обрабатывать подпись. Когда я подключал самописную библиотеку, я спроектировал интерфейс так, чтобы он содержал только чистый C-код:
интерфейс.h
#ifdef __cplusplus
extern "C" {
#endif
int getString();
#ifdef __cplusplus
}
#endif
интерфейс.c:
int getString() {
// do something
}
Возможно, полезные публикации в блоге:
iPhone и Unity3D: интеграция сторонних статических библиотек в проекты XCode, созданные Unity3D
Встроенные плагины Unity: OS X
Блог умного марсианина — Эксперимент с собственным интерфейсом iPhone и Unity 3 Pro
Комментарии:
1. итак, проблема в том, что это написано на objective c?
2. Это фактически устранило проблему, но проблема в том, что мне действительно нужно написать интерфейс на objective C. Это не рекомендуется?
3. Единство говорит » нет » в соответствии с unity3d.com/support/documentation/Manual/Plugins.html Не поймите меня неправильно: вы, конечно, можете написать код своего плагина на Obj-C, но вам нужен интерфейс-оболочка на обычном C для C # / JS вызова плагина. В моей библиотеке более 50 классов, но один скудный интерфейс C.