【问题标题】:How to use iOS framework with Unity?如何在 Unity 中使用 iOS 框架?
【发布时间】:2012-11-07 09:50:02
【问题描述】:

我正在尝试在 Unity 中使用 iOS 原生框架,但我不知道如何。

在我的 C# 脚本中,我调用了这样的原生函数:

[DllImport ("__Internal")]
    private static extern void writeHello();

    void Start () {
        writeHello();
    }

我已经像这样在我的项目中拖动 iOS 框架:

Link to my image

但是当我在 iPad 上部署我的应用程序时,xCode 显示此错误:

架构 armv7 的未定义符号:“_writeHello”,引用 从: RegisterMonoModules.o ld 中的 RegisterMonoModules():未找到架构 armv7 clang 的符号:错误:链接器命令失败 退出代码 1(使用 -v 查看调用)

我不明白为什么,我不知道我正在尝试做的事情是否可行。 帮助! :)

谢谢, 仙人

【问题讨论】:

  • 你的问题解决了吗?
  • @Rajesh 是的,请参阅下面的答案;)

标签: ios frameworks unity3d


【解决方案1】:

iOS框架必须放在xCode生成的项目中,不能放在unity中。

并且框架的函数必须包装在extern "C" 块中(如here 所示)。

然后你就可以在 C# 中通过dllimport 使用它了。

【讨论】:

  • 您好,感谢您的回复。问题是我的writeHello函数是用objective-c原生语言写的,所以我的writeHello文件是.m的,可以使用符号“extern”吗?
【解决方案2】:

文档说,位于 Assets/Plugins/iOS 文件夹中的所有扩展名为 .a,.m,.mm,.c,.cpp 的文件将自动合并到生成的 Xcode 项目中。文档还说当前不支持子文件夹,因此在您的示例中,“framework-helloUnity.framework”文件夹将被忽略。

请务必注意,.m 文件默认为 C 样式绑定,而 .mm 文件默认为 C++ 样式绑定。换句话说,除非您按照 Heilo 的建议使用 extern "C" 关键字,否则如果您将它们放在 .mm 或 .cpp 文件中,将找不到您的函数。

换句话说,如果您输入以下内容:

void writeHello() {}

在一个名为 Assets/Plugins/iOS/myTestFile.m 的文件中,您的代码应该可以编译。

【讨论】:

    【解决方案3】:

    感谢这篇文章找到了解决方案:Calling Objective-C method from C++ method?

    这样做:

    void myWriteHello( void *test) {
        [(id)test writeHello];
    }
    
    - (void) writeHello
    {
        NSLog(@"Hello World!");
    }
    

    并从 Unity 调用我的 C 函数

    【讨论】:

      【解决方案4】:

      您已经在您的 Xcode 项目中的任何类中编写了以下函数 外部“C” { -(无效)写你好 {

      } }

      【讨论】:

        猜你喜欢
        • 2014-02-13
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        相关资源
        最近更新 更多