我正在尝试编写我的第一个统一脚本。这是名为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 ());
}
}
这是我导入到生成的xCode项目的classes文件夹中的两个文件的代码:
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
最后,这是位于Asset文件夹内的javascript文件。
TestPluginTest.js:
function Update ()
{
TestPlugin.Awake ();
}
此外,请注意,我不一定期望这一切都能正常工作,只是为了编译(尽管欢迎额外的指示和提示)
尝试构建到iPhone(实际设备)时,我在xCode中遇到的错误是:
架构armv7的未定义符号:“_ getString”,引用 从: RegisterMonoModules.o中的RegisterMonoModules()ld:找不到架构armv7的符号collect2:ld返回1退出状态
“_ getString”,引自:
RegisterMonoModules.o中的RegisterMonoModules()
ld:找不到架构armv7的符号
collect2:ld返回1退出状态
我很难过!提前谢谢!
答案 0 :(得分:1)
我认为问题在于Obj-C接口,因为链接器不知道如何处理签名。当我连接一个自编写的库时,我设计的接口只包含纯C代码:
interface.h
#ifdef __cplusplus
extern "C" {
#endif
int getString();
#ifdef __cplusplus
}
#endif
interface.c:
int getString() {
// do something
}
也许有用的博客帖子:
iPhone & Unity3D: Integrating 3rd Party Static Libraries in Unity3D Generated XCode Projects
Clever Martian's Blog - An Experiment with iPhone Native UI and Unity 3 Pro