AR Foundation增强现实开发实战(ARKit版)
上QQ阅读APP看书,第一时间看更新

1.6 ARKit初体验

在准备好所有开发所需软硬件之后,本节将构建一个ARKit应用,体验AR应用从工程设置到导出部署全过程、全流程。同时,为更好利用Unity URP渲染管线(Universal Render Pipeline,URP)在移动端应用渲染的优势,本书所有内容讲述和示例均基于URP。AR Foundation在iOS端使用ARKit底层技术,并且Unity工程不能一次性发布成iOS包文件,Unity利用AR Foundation发布iOS AR应用需要分为两步:第1步使用Unity生成Xcode工程文件,第2步利用Xcode编译工程文件发布成ipa应用包。

1.6.1 工程创建

在程序坞或者dock栏上单击Unity Hub图标启动Unity Hub,选择左侧Projects选项卡,如图1-12所示。

图1-12 创建新Unity工程项目

在Projects窗口右上角单击New project按钮打开模板选择窗口,选择3D模板、填写项目名称、选择项目存放位置,将工程命名为Helloworld,由于我们不使用PlasticSCM管理项目,所以不需要勾选该复选框,最后单击右下角Create project按钮创建项目(7),如图1-13所示。

图1-13 选择Unity工程模板,填写项目信息

待Unity窗口打开后,将当前场景名修改为Helloworld,从菜单栏中选择File→Build Settings(或者使用快捷键Command+Shift+B),打开设置窗口。选择Platform下的iOS平台,然后单击Switch Platform按钮将开发平台切换到iOS平台,如图1-14所示。

图1-14 切换开发平台到iOS

1.6.2 工具包导入

在Unity菜单栏中,依次选择Window→Package Manager,打开UPM管理器窗口,单击该窗口左上角下拉菜单,选择Unity Registry选项,这样便会显示所有Unity中注册的工具包,如图1-15所示。

图1-15 显示Unity中注册的所有插件

在本书创作时,AR Foundation v5.0还处在Preview状态,默认UPM中不显示Preview状态插件包,单击右上角配置图标,如图1-15所示,打开Project Settings窗口,选择Package Manager→Advanced Settings选项卡,勾选Enable Pre-release Packages复选框,如图1-16所示。

图1-16 显示Preview状态插件

返回UPM包管理器,滑动左侧列表滚动条,找到AR Foundation v5.0、Apple ARKit XR Plugin v5.0工具包(8),分别选择各工具包,然后单击右侧Install按钮进行安装,如图1-17所示。

提示

在笔者的计算机上,即使勾选Enable Pre-release Packages复选框,在UPM中仍然看不到AR Foundation 5.0-pre12版本,这时,可以打开Unity工程文件夹下的Packages文件夹,使用文本编辑器打开manifest.json文件,添加对应的插件包及版本如下:

在创作本书时,最新版本为pre.12,读者在使用时可以先通过官方文档查看最新版本号。保存后返回Unity时,Unity会自动加载配置的插件包。

图1-17 安装AR Foundation和Apple ARKit XR Plugin插件

由于使用URP,所以还需要导入Universal RP工具包,滑动UPM管理器窗口左侧列表滚动条,找到Universal RP工具包并进行安装(或者通过搜索关键词进行安装),如图1-18所示。

完成所需工具包导入后,关闭UPM管理器窗口。

图1-18 安装Universal RP渲染管线插件

1.6.3 工程设置

在Unity菜单栏中,依次选择Edit→Project Settings打开Project Settings窗口,选择XR Plug-in Management项,勾选Initialize XR on Startup和Apple ARKit复选框,如图1-19(a)所示,然后选择XR Plug-in Management下的Apple ARKit子项,选择Requirement属性为Required值,不勾选Face Tracking复选框,如图1-19(b)所示。

图1-19 设置XR Plug-in Management和ARKit属性

在Unity工程窗口(Project窗口)Assets目录下新建一个文件夹,命名为Settings,右击Settings文件夹,在弹出的级联菜单中依次选择Create→Rendering→URP Asset(with Universal Renderer)创建新的URP,并命名为ARKitPipeline,如图1-20所示。

图1-20 创建URP

该步骤会新创建两个文件:ARKitPipeline.asset和ARKitPipeline_Renderer.asset。选择ARKitPipeline_Renderer.asset文件,在Unity属性窗口(Inspector窗口)中查看该文件属性,单击其下方的Add Renderer Feature按钮,在弹出的菜单中选择AR Background Renderer Feature添加特性,如图1-21所示,通过添加该特性,AR Foundation就可以将摄像头捕获的场景图像渲染为AR应用背景了。

返回Project Settings窗口,选择Graphics项,设置其Scriptable Render Pipeline Settings属性值为创建的ARKitPipeline.asset渲染管线,如图1-22所示。

图1-21 添加AR Background Renderer Feature渲染特性

图1-22 设置Graphics自定义渲染管线

在Project Settings窗口,选择Quality项,在右侧面板中选择iOS图标下的下拉菜单,将质量设置为Low或者Medium(降低质量以提高性能),如图1-23所示。

图1-23 设置Quality自定义渲染管线

在Project Settings窗口,选择Player选项,在Player栏的Company Name与Product Name中填写公司名与产品名,然后选择iOS选项卡进入iOS平台设置,打开Other Settings卷展栏,填写摄像头使用描述,这会在AR应用第1次启动时向用户请求摄像头使用权限;选择目标设备,目标设备可以是iPhone,也可以是iPad,还可以同时为iPhone+iPad;选择目标SDK,因为我们使用真机进行应用调试,所以这里将Target SDK设置为Device SDK;填写最低iOS版本(ARKit要求最低11.0,否则AR应用无法运行),如果应用必须使用ARKit,这里也可以勾选Require ARKit support复选框(9)。AR Foundation v5.0版本支持新的输入系统,需要将Active Input Handing属性选为Input System Package(New)或者Both(10),各项设置如图1-24所示。

图1-24 ARKit工程设置面板

1.6.4 环境搭建

设置完成后返回Unity主界面,为统一规范管理各类文件,在工程窗口Assets目录下新建Prefabs、Scripts和Materials 3个文件夹,同时在层级窗口(Hierarchy窗口)Helloworld场景中删除Main Camera对象(因为XR Origin对象带有一个AR相机),Directional Light对象可根据需要决定是否删除。

在层级窗口中的空白处右击,在弹出的级联菜单中依次选择XR→AR Session和XR→XR Origin,新建这两个AR应用基础对象,如图1-25所示。

在工程窗口Materials文件夹中创建两种材质,分别命名为Plane、Red,材质均使用Universal Render Pipeline/Lit着色器,分别为这两种材质设置不同的颜色,如将Plane设置为绿色,将Red设置为红色,如图1-26所示。

图1-25 添加AR应用基础对象

图1-26 新建平面与球体材质

在层级窗口中的空白处右击,在弹出的级联菜单中依次选择XR→AR Default Plane创建该对象,将其材质修改为新创建的Plane(11),将层级窗口中生成的AR Default Plane对象拖动到工程窗口中的Prefabs文件夹下,制作一个平面预制体,如图1-27所示,然后删除层级窗口中的AR Default Plane对象。

在层级窗口中的空白处右击,在弹出的级联菜单中依次选择3D Object→Cube创建一个立方体对象,将Cube材质修改为Red,将其Scale属性设置为(0.1,0.1,0.1),与制作平面预制体一样,制作一个Cube预制体,然后删除层级窗口中的Cube对象。

图1-27 制作平面预制体

在层级窗口选择XR Origin对象,然后在属性窗口中单击Add Component按钮,并在弹出的搜索框中输入AR Plane Manager,双击搜索出来的AR Plane Manager添加该组件,如图1-28所示。

图1-28 挂载AR Plane Manager组件

将AR Plane Manager组件的平面检测模式(Detection Mode)属性设置为Horizontal或者Everything,将工程窗口中Prefabs文件夹下的AR Default Plane预制体拖动到AR Plane Manager组件下的Plane Prefab属性框,完成平面预制体的设置,如图1-29所示。

图1-29 为AR Plane Manager组件Plane Prefab属性赋值

1.6.5 代码编写

使用VS4M编辑脚本代码,首先需要关联Unity中C#脚本与VS4M IDE。在Unity菜单中,依次选择Unity→Preferences打开偏好设置窗口,在窗口左侧选择External Tools选项,将External Scripts Editor属性设置为Visual Studio for Mac[17.0.0],如图1-30所示。

图1-30 设置脚本代码编辑器

在工程窗口Scripts文件夹下,右击空白处,在弹出的级联菜单中依次选择Create→C#Script,新建一个脚本文件,并命名为AppController,双击AppController脚本,在VS4M中编辑该脚本,添加代码如下:

在上述代码中,首先使用[RequireComponent(typeof(ARRaycastManager))]属性确保添加该脚本的对象上必须挂载有AR Raycast Manager组件,因为射线检测需要使用AR Raycast Manager组件。在Update()方法中对手势操作进行射线检测,在检测到的平面上放置一个虚拟物体,如果该虚拟物体已存在,则将该虚拟物体移动到新的碰撞点位置。

在层级窗口中选择XR Origin对象,为其挂载AppController脚本(可以使用Add Component按钮在搜索框中搜索AppController添加,也可以直接把AppController脚本拖曳到XR Origin对象上添加),并将上一步制作的Cube预制体拖曳到AppController脚本的Spawn Prefab属性框中,如图1-31所示。

图1-31 为AppController脚本组件Spawn Prefab属性赋值

至此,我们已完成Helloworld AR应用环境搭建和功能开发,但是Unity不能直接生成iOS端应用程序,所以还需要将Unity工程发布成Xcode工程。

1.6.6 发布Xcode工程

将iPhone手机通过USB线或者WiFi连接到开发计算机,按快捷键Command+Shift+B(或者在菜单栏中选择File→Build Settings)打开Build Settings对话框,如图1-32所示。

在打开的对话框中确保选中当前场景,单击Build或者Build And Run按钮生成Xcode工程,建议将Xcode工程保存到另一个独立的文件夹下(不要在原来的Unity工程文件夹下),设置发布后的程序名,最后单击Choose按钮开始编译,生成Xcode工程,如图1-33所示。当使用Build And Run方式时,生成完成后会自动通过Xcode IDE打开Xcode工程;当使用Build方式时,生成完成后会打开Xcode工程路径,这时可以通过双击.xcodeproj工程文件使用Xcode IDE打开工程,也可以先启动Xcode IDE后单击左侧Open a project or file按钮,然后选择Unity发布出来的Xcode工程并打开。

如果Unity编译生成没有错误,则可在Xcode打开生成的工程后,在其IDE窗口中依次选择Xcode工程图标→工程名,然后在打开的General通用配置面板检查和设置基本工程配置,填写好Display Name(工程名)、Bundle Identifier(包ID)、Version、Build(12),Bundle Identifier即Unity中设置好的Bundle Identifier。如果要发布到AppStore上,则Bundle Identifier必须与苹果公司开发者网站上的设置保持一致,Version、Build也要符合递增的要求,如图1-34所示。

图1-32 编译并运行应用对话框

图1-33 选择Xcode生成路径

图1-34 检查和设置基本工程配置

设置好基本工程配置后,切换到Signing&Capabilities选项卡,勾选Automatically manage signing复选框使用自动签名管理,将Team属性设置为一个有效的开发者账号,如图1-35所示。

图1-35 检查和设置基本工程配置

如果还没有开发者账号,则可单击Team属性框后的下拉菜单,选择Add an Account新建一个开发者账号,如图1-36所示,具体操作可参见官方说明文档。

图1-36 创建开发者账号

通过USB或者WiFi将iPhone/iPad连接到开发计算机,在Unity-iPhone工程栏,依次选择Unity-iPhone→×××的iPhone,如图1-37所示。

图1-37 选择真机设备

1.6.7 调试运行

在Xcode配置完成后,单击IDE左上角的编译运行图标(�图标)开始编译、发布、部署、运行。如果iPhone手机是第1次运行Xcode应用,则会弹出授权提示框,如图1-38(a)所示,为了方便直接在手机硬件上安装、调试应用程序,需要进行一些设置。

(1)单击设置图标,打开系统设置功能,单击“通用”按钮进入通用设置窗口,如图1-38(b)所示。

(2)单击“VPN与设备管理”按钮进入VPN与设备管理窗口,如图1-38(c)所示。

图1-38 对开发计算机和应用进行授权设置(一)

(3)单击开发者账号进入开发者授权窗口,如图1-39(a)所示。

(4)在开发者授权窗口,选择“信任×××开发者”,如图1-39(b)所示。

(5)在弹出的对话框中,单击“信任”按钮进行授权,如图1-39(c)所示。此时iPhone手机会对该开发者账号信息进行网络验证(需要连接网络),验证通过后,发布安装的应用后会出现“已验证”字样,如图1-39(d)所示,至此就可以通过Xcode将应用直接部署到手机并运行应用了。

图1-39 对开发计算机和应用进行授权设置(二)

若整个过程没有出现问题(13),则可在Helloworld AR应用打开后,找一个相对平坦且纹理比较丰富的平面左右移动手机进行平面检测,在检测到平面后,用手指单击手机屏幕上已检测到的平面,将会在该平面上加载一个小立方体,如图1-40所示。至此,我们使用AR Foundation开发的iOS Helloworld AR应用已成功。

图1-40 应用程序运行效果图