本文实现打开AR相机和关闭AR相机功能,在主界面点击Start AR按钮后打开AR相机,在主界面点击Stop AR按钮后关闭AR相机
1、启动AR相关插件
通过Edit->Plugins启用AugmentedReality下面的所有插件
2、自定义Pawn
在Content->ARBase目录右键,Blueprint Class->Pawn创建一个自定义Pawn,命名为ARPawn
给ARPawn添加1个Camera组件
在Content->ARBase目录右键,Blueprint Class->Game Mode Base 创建一个自定义Game Mode Base,命名为ARGameModeBase,同时将ARGameModeBase的Default Pawn Class指定为ARPawn
通过Edit->Project Settings->Maps & Modes,将Default GameMode设置为ARGameMode
3、创建ARSessionConfig
在ARBase目录右键,Miscellaneous->Data Asset,搜索ARSessionConfig创建ARSessionConfig
4、启动AR相机
在MainPage中,选择Graph,在FUNCTIONS中点击加号,添加1个函数,取名为StartAR
搜索StartAR,调用AugmentedReality中的StartARSession函数
其中SessionConfig选择刚刚创建的ARSessionConfig
5、隐藏场景中的天空球等物体,显示相机拍摄内容
场景中的Floor不需要,删除Floor
在MainPage中定义一个函数,用于显示隐藏天空球,函数接收一个输入参数Visible
给场景中的天空元素添加Tag,Tag命名为"SkySphere",方便在蓝图中找到这些Actor,总共包含ExponentialHeightFog,SkyAtmosphere,SM_SkySphere,VolumetricCloud这4个Actor
实现ShowHideSkySphere函数
在StartAR后隐藏SkySphere
6、实现界面中的Start AR功能
给Btn_Start_AR按钮添加On Clicked回调,在On Clicked之后调用自定义的Start AR函数
7、实现界面中的Stop AR功能
实现自定义的StopAR函数
给Btn_Stop_AR按钮添加On Clicked回调,在On Clicked之后调用自定义的Stop AR函数
8、Android申请相机权限
直接调用AugmentedReality的StartARSession函数会黑屏,因为Android相机权限需要运行时动态申请
1.创建1个自定义事件StartAREvent,判断是否是Android平台,如果是则请求相机权限,如果不是则直接启动AR相机
2.检查相机权限,如果已经授予权限,直接启动AR相机,如果没有授予权限,则请求相机权限
3.无论是否授予权限,都会回调OnPermissionGranted事件,已授予的权限存储在GrantResults中,因为这里只申请了1个权限,所以判断GrantResults的长度大于0,就表示授予权限了,授权后打开AR相机
4.在Btn_Start_AR按钮的On Clicked之后调用自定义的StartAREvent函数
9、解决Android打开AR相机黑屏
取消对Vulkan的支持即可
10、支持的机型
ARKit支持iOS所有机型,ARCore只支持Android部分机型,具体型号参考官方说明:
支持ARCore的设备: https://developers.google.com/ar/devices?hl=zh-cn