【问题标题】:Integrating Unity in Swift project在 Swift 项目中集成 Unity
【发布时间】:2018-12-21 15:47:57
【问题描述】:

嗯,我已经看过并尝试了从类似问题“如何将 Unity iOS 代码集成到 Swift 项目”中引用的大多数教程。但是我所有的尝试都失败了,链接器错误“架构 arm_64 没有这样的符号”或“架构 x86_64 没有这样的符号”。我在 Unity 方面尝试了不同的构建选项,但没有成功。 所有这些教程/文章的共同缺点是:所有这些都过时了,我发现文章的 Unity 最新版本是 2018.2.2f1,我的 Unity 版本是 2018.2.20f1。 那么,有人知道如何将 Unity 2018.2.20+ iOS 构建代码集成到 Swift 4.2 (XCode 10) 项目中吗? 任何帮助将不胜感激。

【问题讨论】:

  • 您可以创建 Unity3D 应用程序,将其构建到 iOS 项目中,并且您可以根据需要将新的 ViewController 推送到根目录:let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController。不要忘记从 Unity3D 关闭/隐藏/暂停未使用的控制器。您可以通过 PlayerPrefs = UserDefaults 接口与 Unity3D 代码进行通信。我已经用同样的方法做了几个项目。
  • 你能分享一些代码示例吗?
  • 您熟悉 PlayerPrefs 吗?例如,当(例如,点击某个按钮)您想从 Xcode 项目(例如,某个场景)加载新的 ViewController 时,在 Unity3D 中将“GoToXcode”键设置为 PlayerPrefs。在 Xcode 类 AppDelegate 中监听 UserDefaults:let isChange = UserDefaults.standard.string(forKey: “GoToXcode”) ?? false。您可以在 Timer 的块中收听它。 if isChange { let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController}.
  • 我想我明白了。但是您将 Unity 部分视为项目的“主要”(或控制器)部分,在我的情况下正好相反,我有一个大的 Swift 项目,我只想在一种情况下显示用户 Unity 3D 场景,所以我想要能力展示以 UnityViewController 为例。
  • 我认为,有两种可能:您应该控制 Xcode 和 Unity3D AppDelegates。 Unity3D AppDelegate 很复杂,Unity3D 和自定义方法都有很多对象。祝你好运。

标签: ios swift unity3d


【解决方案1】:

这是我在我的 swift 项目中集成统一的方式。

  1. 创建新的 Xcode 项目(使用 swift)

  2. (创建桥接头步骤)创建新类 File -> New -> Cocoa touch 类并选择语言 Objective C 它将要求创建桥接头选择创建

  3. 转到 https://github.com/jiulongw/swift-unity 并下载 zip 文件

  4. 打开下载的文件并解压。转到 Xcode 文件夹 -> DemoApp-> 你会发现 Unity 文件夹 复制粘贴到你的项目中(如果你拖放它,请确保选中在目的地复制的复选框)

  5. 并排打开您的新 Xcode 项目和自动生成的统一项目,以便您可以轻松复制粘贴它

  6. Classes Folder 从 unity Xcode 项目复制到您的 Xcode 项目到步骤 4 的 unity 文件夹

  7. Library Folder 从 unity Xcode 项目复制到您的 Xcode 项目到步骤 4 的 unity 文件夹

  8. Data 文件夹从 unity Xcode 项目复制到您的 Xcode 项目到步骤 4 的 unity 文件夹

  9. 重要转到 Xcode 项目 点击左侧的项目名称会有两个选项项目和目标。在中心主窗口中选择 project,您可以看到 Configuration 展开它并根据您的项目名称从下拉菜单中选择 Unity

  10. 转到您在步骤中复制的 Classes 文件夹 并删除 ma​​in.mm 文件或评论所有内容

  11. 转到您在步骤3中下载的文件夹将AppDelegate.swift的所有代码复制到您的AppDelegate.swift文件中

  12. 在您的 Xcode 项目中搜索 YourProjectFileName-Bridging-Header 并复制粘贴

    #ifndef BRIDGING_HEADER #define BRIDGING_HEADER

    #import #import "UnityUtils.h" #import "UnityAppController.h" #import "UnityInterface.h"

    #endif /* BRIDGING_HEADER */

  13. 复制粘贴 LaunchScreen-iPad.xibLaunchScreen-iPhone.xib 到您的项目并删除 LaunchScreen.storyboard em>

  14. 编译它 :] 它应该编译成功(在我的情况下,我得到错误,DeviceSettings.mm 缺少 return 语句,所以我只是在 } 之前添加了 return deviceUnknown;)

  15. 您可以查看 step3 下载的 view controller.swift 文件,了解如何在屏幕上显示统一视图

注意:集成unity后无法在模拟器中运行,必须在真机上运行。 最好在同一台机器上拥有 unity 和 xcode。有时所有框架都只能获取文件夹的引用,所以在不同的机器上你可能会遇到这个问题

最后你的项目应该是这样的

希望对你有帮助。

觉得有帮助别忘了点赞哦:)

【讨论】:

  • 在我的情况下,“Unity.xcconfig”文件中缺少“Exports.xcconfig”文件。当我将评论行 #include "Exports.xcconfig" 并尝试按照您提供的步骤运行时,它会给我以下错误。 prnt.sc/nilcsl 我在 xcode 10.2 和 unity 2018.3.0f2 中遵循步骤
  • @DhavalPatel 看到这个github.com/jiulongw/swift-unity/issues/8\
  • 嗨,@Prashant Tukadiya 我已经检查了上述解决方案。自动生成“Exports.xcconfig”文件。但是当我使用上述步骤构建项目时,它会给我一个错误。 prnt.sc/nilcsl
  • @DhavalPatel 不要在模拟器中做,你必须在真实设备上运行项目,因为它不支持模拟器架构
  • 嗨,@Prashant 在真实设备中它给了我同样的错误。请查看prnt.sc/ninvwy
猜你喜欢
  • 1970-01-01
  • 2017-12-17
  • 2017-09-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2017-02-20
相关资源
最近更新 更多