概述
# 概述
# IoTCenter 3D可视化平台
瀚海低代码应用开发平台的三维可视化部分,平台通过大屏/巨屏动态融合,数字孪生、自然语音交互以及协同信息处理,打造酷炫的大数据可视化平台和领导驾驶舱。
# 技术要求
要进行二次开发,需要掌握 C# (opens new window)和Unity (opens new window)的相关知识,可以结合Unity官方文档 (opens new window)学习Unity的相关知识。
# 开发包结构
开发者可以通过3D开发开源仓库 (opens new window)获取开发包(仓库中也提供了3D可视化平台安装包,解压即可使用)进行开发,其目录结构如下所示:
# IoTCenter 3D指南
介绍重要的IoTCenter3D相关概念。
# 平台基本工作原理
平台使用AssetBundle (opens new window)技术来加载自定义的设备
、场景
、UI面板
、UI弹窗
预制体 (opens new window),所以二次开发主要是开发出平台所规定的各类预制体,并且打包成符合要求的**AssetBundle (opens new window)**包。
由于AssetBundle
包不支持代码,平台通过设置程序集 (opens new window)Scene.Module
,将设备
、场景
、UI面板
、UI弹窗
的二次开发代码包含在Scene.Module
中,然后平台引用编译后的Scene.Module.dll
,从而正确运行代码。
提示
关于AssetBundle
可以通过官方教程 (opens new window)进行了解,官方教程介绍了AssetBundle
的功能。如果想快速了解如何打包,请查看官方教程的这一部分 (opens new window)为预制体设备设置打包信息,然后使用工具 (opens new window)打包。
# 规范和代码要求
以下将详细介绍场景、设备、UI控件、UI弹窗/面板开发的详细规范和代码要求
场景(Scene)
- 平台中的每个场景对应Unity中的Scene (opens new window),开发者只需要新建场景,并运用
Unity
的能力在其中创作即可。当创作完成,开始修改场景的AssetBundle
信息,平台规定了场景的AssetBundleName
和AssetBundleVariantName
。
AssetBundleName:确保名称唯一并且是全部小写(如scene_1)。
AssetBundleVariantName:必须为assetbundle。
提示
关于设置AssetBundle
信息可以点击在Project (opens new window)中的场景,在Inspector (opens new window)窗口的最底部可以设置AssetBundleName
和AssetBundleVariantName
。
设置完成后,开发者将生成的
AssetBundle
包放在3D可视化平台的\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Scenes
目录下,就可以在3D平台中看到自定义的场景了。开发者生成
AssetBundle
包和dll
代码并将其放在指定位置,运行平台后参考低代码开发-常用功能介绍中创建场景的内容进行查看。
设备
一切从预制体开始,开发者在Hierarchy (opens new window)中制作单个物体或者是嵌套父子层级的物体之后,需要将父游戏对象制作为预制体 (opens new window),放在Project (opens new window)中。
接下来将修改预制体的
AssetBundle
信息,平台规定了设备的AssetBundleName
和AssetBundleVariantName
。
AssetBundleName:必须为deviceres。
AssetBundleVariantName:必须为assetbundle。
提示
关于设置AssetBundle
信息可以点击在Project (opens new window)中的场景,在Inspector (opens new window)窗口的最底部可以设置AssetBundleName
和AssetBundleVariantName
。
设置完成后,开发者将生成的
AssetBundle
包放在3D可视化平台的\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices
目录下,就可以在平台中看到自定义的设备了。编写代码让其有丰富的交互能力,但是平台规定了代码的写法,开发者只需要做简单的适配即可。首先需要在预制体的父物体添加派生自
DeviceBase
的自定义类public class customize : DeviceBase { }
DeviceBase(参考附录-Class部分的内容)可以重写逻辑从而满足自己的项目需求,部分函数可以由开发者调用,部分函数由平台管理,为了帮助开发者理解和更好的适配平台,给出被平台管理的函数生命周期如下图所示:
至此开发者就可以发挥
C#
的能力构建丰富的交互内容了。开发者生成
AssetBundle
包和dll
代码并将其放在指定位置,运行平台后参考低代码开发-常用功能介绍中模板设备的内容进行查看。
UI控件
跟设备一样同样从预制体开始,开发者在Hierarchy (opens new window)中制作单个物体或者是嵌套父子层级的物体之后,需要将父游戏对象制作为预制体 (opens new window),放在Project (opens new window)中。
接下来将修改预制体的
AssetBundle
信息,平台规定了UI控件的AssetBundleName
和AssetBundleVariantName
。
AssetBundleName:必须为uicontrols。
AssetBundleVariantName:必须为assetbundle。
提示
关于设置AssetBundle
信息可以点击在Project (opens new window)中的场景,在Inspector (opens new window)窗口的最底部可以设置AssetBundleName
和AssetBundleVariantName
。
设置完成后,开发者将生成的
AssetBundle
包放在3D可视化平台的\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices
目录下,就可以在平台中看到自定义的UI控件了。编写代码让其有丰富的交互能力,但是平台规定了代码的写法,开发者只需要做简单的适配即可。首先需要在预制体的父物体添加派生自
UIControl
的自定义类public class customize : UIControl { }
开发者可以开放属性,当用户在平台的编辑模式下,点击UI控件就会显示出可配置属性,以下是标准写法:
/// <summary> /// 用于公开给用户配置的属性 /// </summary> [SerializeField] private string m_url = ""; public string Url { get { return m_url; } set { m_url = value; } }
UIControl(参考附录-Class部分的内容)可以重写逻辑从而满足自己的项目需求,部分函数可以由开发者调用,部分函数由平台管理,为了帮助开发者理解和更好的适配平台,给出被平台管理的函数生命周期如下图所示:
至此开发者就可以发挥
C#
的能力构建丰富的交互内容了。开发者生成
AssetBundle
包和dll
代码并将其放在指定位置,运行平台后参考低代码开发-常用功能介绍中UI控件组态功能的内容进行查看。
UI弹窗/面板
UI弹窗有两种应用场景:
跟设备一样同样从预制体开始,开发者在Hierarchy (opens new window)中制作单个物体或者是嵌套父子层级的物体之后,需要将父游戏对象制作为预制体 (opens new window),放在Project (opens new window)中。
接下来将修改预制体的
AssetBundle
信息,平台规定了UI控件的AssetBundleName
和AssetBundleVariantName
。
AssetBundleName:必须为uiforms。
AssetBundleVariantName:必须为assetbundle。
提示
关于设置AssetBundle
信息可以点击在Project (opens new window)中的场景,在Inspector (opens new window)窗口的最底部可以设置AssetBundleName
和AssetBundleVariantName
。
设置完成后,开发者将生成的
AssetBundle
包放在3D可视化平台的\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices
目录下,就可以在平台中看到自定义的UI弹窗了。编写代码让其有丰富的交互能力,但是平台规定了代码的写法,开发者只需要做简单的适配即可。首先需要在预制体的父物体添加派生自
DeviceUIFormBase
的自定义类public class customize : DeviceUIFormBase { }
开发者可以开放属性,当用户在平台的编辑模式下,点击UI弹窗就会显示出可配置属性,以下是标准写法:
/// <summary> /// 用于公开给用户配置的属性 /// </summary> [SerializeField] private string m_url = ""; public string Url { get { return m_url; } set { m_url = value; } }
DeviceUIFormBase(参考附录-Class部分的内容)可以重写逻辑从而满足自己的项目需求,部分函数可以由开发者调用,部分函数由平台管理,为了帮助开发者理解和更好的适配平台,给出被平台管理的函数生命周期如下图所示:
至此开发者就可以发挥
C#
的能力构建丰富的交互内容了。开发者生成
AssetBundle
包和dll
代码并将其放在指定位置,运行平台后点击对应设备时弹出UI弹窗。