使用unity2dumix,在Unity3D上创造DuMix AR内容。可将制作好的AR内容上传至DuMix内容平台 (http://dumix.baidu.com/content#/) ,用百度App等进行访问。
项目目前处于实验阶段,当前仅支持Mac OS平台,需搭配iOS设备使用,更多功能持续开发中,也欢迎熟悉Unity3D、DuMix的同学一同参与本项目的开发。
-
Clone代码库 打开 Assets/DuMixARBuilder/Scenes/SlamDemo.unity
[建议] 调整Unity3D的视图布局,如下图,方便调试和预览场景。
-
安装预览App, /preview app/Preview.ipa (安装完成后,需在设置中信任企业证书,才能正常打开App)
-
联机调试。保持Mac和iPhone在同一局域网下(项目中unity和预览App使用局域网ip地址进行连接,需保证Mac和iPhone之间可以互相ping通),在Unity3D顶部菜单栏中选择DuMix/Settings,输入手机上展示的IP地址。点击 DuMix/Connect 完成连接。点击DuMix/Sync 启动联机调试。
目前项目仅支持DuMix ARSDK的部分功能,更多功能持续开发中,也欢迎熟悉DuMix的同学一同参与本项目的开发。
- SLAM
- [] IMU
- [] 2D 图像跟踪
- 3D 模型 (FBX)
- 平面图片
- 视频
- 蒙版视频
- [] 序列帧
- [] 天空盒
- [] 粒子系统
- 将下载好的FBX模型文件存放到 Assets/DuMixARCase/Resource/ 目录下。
- 将FBX拖入场景,挂到SlamScene节点下。
- 给模型节点绑定 Assets/DuMixARBuilder/Scripts/Component/3D/DuMixCMPTModel.cs 脚本,在脚本属性 [Res Path] 中填写FBX文件在 Assets/DuMixARCase/Resource/ 下的相对路径。
- 调整模型的大小位置等。
- 将图片文件存放到 Assets/DuMixARCase/Resource/ 目录下。
- 将 Assets/DuMixARBuilder/Prefabs/3D/Plane 拖入场景,挂在SlamScene节点下,将Plane的纹理调整为自定义图片。
- 查看Plane绑定的DuMixCMPTPlane脚本,在脚本属性 [Res Path] 中填写图片在 Assets/DuMixARCase/Resource/ 下的相对路径。
- 调整模型的大小位置等。
- 将视频文件存放到 Assets/DuMixARCase/Resource/ 目录下。
- 将 Assets/DuMixARBuilder/Prefabs/3D/Video 拖入场景,挂在SlamScene节点下。
- 查看Video绑定的DuMixCMPT3DVideo脚本,在脚本属性 [Res Path] 中填写视频文件在 Assets/DuMixARCase/Resource/ 下的相对路径。
- 根据视频的类型,调整[Video Type]属性值。
- 调整模型的大小位置等。
- 配置视频播放行为:
- 目前UI元素仅支持 平面图片/视频。
- 将相关文件存放到 Assets/DuMixARCase/Resource/ 目录下。
- 将 Assets/DuMixARBuilder/Prefabs/UI 下的 Button/Video拖拽到场景中,并添加到 UICanvas 节点下。
- 配置相关脚本属性,添加资源路径(同平面图片和视频)。
- /Assets/DuMixARBuilder/Prefabs/Event/ 和 /Assets/DuMixARBuilder/Prefabs/Action/ 目录下提供了部分交互组件,用于配置场景交互逻辑。
- 通常将Event组件挂在场景元素节点下(如3D模型、平面图片、视频等等),并将Action组件挂在Event组件下以表达一个交互逻辑。如在3D模型节点下配置ClickEvent和AnimAction,可实现点击模型,播放模型动画的交互逻辑。
- 目前支持的Event组件包括
- ClickEvent:绑定的节点被点击
- InitEvent:节点初始化完成
- 目前支持的Action组件包括:
- AnimationAction: 播放模型动画
- AudioAction:控制音乐播放
- VideoAction: 控制视频播放
- OpenUrlAction: 使用默认浏览器打开URL
- VisibilityAction: 隐藏/显示节点
- 编辑/Assets/DuMixARBuilder/LuaFiles/main.lua 文件,根据DuMix Lua API添加自定义交互逻辑。
- 在Unity3d 顶部菜单栏中点击 DuMix/Sync (是否连接预览App 不影响本操作)。
- 找到 /Assets/DuMixARCase/Build/ 目录,其中ar.zip为转换完成的DuMix AR资源包。
制作好的DuMix AR资源包可上传到 DuMix内容平台 (http://dumix.baidu.com/content) ,并分发到百度App等渠道,详情参考
项目相关脚本代码位于 /Assets/DuMixARBuilder/Scripts/ 目录下
- Common/ 包含项目的一些基本配置以及网络、文件压缩相关功能模块。
- Component/ 包含组件相关代码,如场景元素,Event组件,Action组件等。
- Conversion/ 包含将Unity Scene转换为DuMix AR资源包相关的功能模块。转换相关功能入口为DuMixCaseBuilder的Run方法。
- EditorWindows/ 包含Unity3d 菜单扩展相关代码。
- RemoteDebug/ 包含与预览App通信所需的消息结构定义。
场景格式转换是解析Unity Scene中的内容,并将相应的节点、资源转换为DuMix ARSDK内容标准的过程,DuMixCaseBuilder类的Run方法实现了该功能。在Run方法中,依次完成了:
- 将/Assets/DuMixARCase/Templates/ar 文件夹下的内容拷贝到 /Assets/DuMixARCase/Build/ar 目录下,作为后续填充内容的基础。
- 遍历 DuMixCMPTScene 下的子节点,执行单个节点的格式转换,包括转换节点Transform坐标,转换资源文件格式(如将FBX模型转换为GLTF格式),拷贝资源文件到Build/ar 目录,根据DuMix Json API (http://ai.baidu.com/docs#/DuMixAR-Json-3D/top) 输出节点描述等。 单个节点转换功能的实现在 DuMixARBuilder/Scripts/Conversion/NodeConvertor.cs 中。
- 遍历 DuMixCMPTUICanvas 下的子节点,执行单个UI节点的格式转换。
- 更新 Assets/DuMixARCase/Build/ar/res/main.json 文件,更新DuMix AR场景描述。
- 遍历所有DuMixCMPTEvent / DuMixCMPTAction 对象,输出交互脚本。
- 更新 Assets/DuMixARCase/Build/ar/ 下的lua脚本文件。
- 压缩 Assets/DuMixARCase/Build/ar 目录,输出 ar.zip。
- 检查当前Websocket状态,并将ar.zip发送到预览App。(非必须)
DuMix ARSDK中,所有的交互逻辑都是借助Lua API (http://ai.baidu.com/docs#/DuMixAR-Lua-base/top) 实现的。在本项目中,所有Event类都继承自 DuMixCMPTEvent类,并实现了 string TransferToDuMixScript() 方法。在该方法中,根据脚本参数,输出与之相应的 Lua 脚本,并写入 ar/unity.lua 当中。
- 项目中使用的FBX模型的材质必须绑定有贴图,否则转换得到的DuMix内容无法正常预览。
当前项目对DuMix ARSDK的支持还远不完整,功能持续开发中,也欢迎熟悉DuMix的同学一同参与本项目的开发。 DuMix相关资料可查询:
Email: [email protected]
百度AR开发交流群 号码:47208111