在Swift项目中集成Unity

7

我看过并尝试了许多与“如何将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代码进行通信。我已经以相同的方式完成了几个项目。 - Agisight
你能分享一些代码示例吗? - zzheads
你熟悉PlayerPrefs吗?比如说,当(例如点击某个按钮时)你想从Unity3D项目中加载一个新的ViewController(例如一些场景),可以将一个键“GoToXcode”设置到PlayerPrefs中。在Xcode类AppDelegate中监听UserDefaults:let isChange = UserDefaults.standard.string(forKey: “GoToXcode”) ?? false。你可以在Timer的块中监听它。if isChange { let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController} - Agisight
我想我明白了你的意思。但是你把Unity部分看作是项目的“主要”(或控制器)部分,在我的情况下恰恰相反,我有一个大型的Swift项目,只想在某种情况下向用户展示Unity 3D场景,因此我希望能够像使用UnityViewController一样展示该场景。 - zzheads
我认为有两种可能的方法:你应该控制Xcode和Unity3D AppDelegates。Unity3D AppDelegate非常复杂,有许多对象包括Unity3D和自定义方法。祝好运。 - Agisight
显示剩余3条评论
1个回答

5

以下是我如何在我的Swift项目中集成Unity的方法。

  1. 创建一个新的Xcode项目(使用Swift)

  2. (创建桥接头文件步骤)创建新的类文件-〉New-〉Cocoa touch class并选择Objective C语言,它会要求你创建桥接头文件,选择创建

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

  4. 打开下载的文件并解压缩。进入Xcode文件夹-〉DemoApp-〉您将找到Unity Folder,将其复制并粘贴到您的项目中(如果您拖放它,请确保您勾选目标复制选项)

  5. 打开您的新Xcode项目和自动生成的Unity项目并排放置,以便您可以轻松地复制粘贴

  6. 将来自Unity Xcode项目的Classes Folder复制到第4步的unity文件夹下的您的Xcode项目中

  7. 将来自Unity Xcode项目的Library Folder复制到第4步的unity文件夹下的您的Xcode项目中

  8. 将来自Unity Xcode项目的Data文件夹复制到第4步的unity文件夹下的您的Xcode项目中

  9. 重要:进入Xcode项目,点击左侧项目名称,会出现两个选项Project和Target。选择project,在中心主窗口中可以看到Configuration,展开它,并对您的项目名称进行选择,在下拉列表中选择Unity

  10. 进入您在步骤5中复制的Classes Folder,并删除main.mm文件或将其注释掉

  11. 进入您在第3步下载的文件夹,将AppDelegate.swift的所有代码复制到您的AppDelegate.swift文件中

  12. 在您的Xcode项目中搜索YourProjectFileName-Bridging-Header并拷贝粘贴以下内容:

    #ifndef BRIDGING_HEADER #define BRIDGING_HEADER

    #import <UIKit/UIKit.h> #import "UnityUtils.h" #import "UnityAppController.h" #import "UnityInterface.h"

    #endif /* BRIDGING_HEADER */

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

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

  15. 您可以查看步骤3中下载的view controller.swift文件,以了解如何在屏幕上显示Unity视图

注意:在集成Unity后,您将无法在模拟器中运行,因此必须在真实设备上运行。 最好在同一台计算机上安装Unity和Xcode。有时所有框架都只能获取文件夹的引用,所以在不同的计算机上可能会遇到问题。
最后,您的项目应该看起来像这样:Screenshot

@DhavalPatel 不要在模拟器中运行,因为它不支持模拟器架构,你必须在真实设备上运行项目。 - Prashant Tukadiya
嗨,@Prashant,在真实设备上它给了我相同的错误。请检查 https://prnt.sc/ninvwy - Dhaval Patel
在我的情况下,“Exports.xcconfig”文件是在XcodePostBuild.cs文件中指定的项目中生成的。这是我的项目导航器的截图。http://prnt.sc/nio3f4 - Dhaval Patel
@DhavalPatel,您能展示一下项目设置的屏幕截图吗?我的意思是,在配置中是否选择了Unity?您的桥接头文件是否正确? - Prashant Tukadiya
@DhavalPatel 好的,前往Unity --> 打开项目 --> 前往玩家设置 --> 将脚本后端更改为 LL2CPP 而不是 mono,然后再按照步骤1到13进行操作,使用新生成的Xcode项目。 - Prashant Tukadiya
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接