开发者中心 开发者中心
  • 简体中文
  • English
视频教程
敢为云网站
  • 6.0版本
  • 6.1 版本
视频教程
敢为云网站
  • 平台概述
  • 平台功能
  • 平台安装
  • 开发者指南
    • 协议插件开发
    • 扩展插件开发
    • 报警插件开发
    • 应用插件开发
    • Web可视化开发
    • 3D可视化开发
      • 低代码开发
      • 二次开发
        • 概述
        • 编辑器插件
        • 开发实战
        • 附录
          • Interface
          • API
          • Class
          • 常量
          • FAQ
    • 桌面可视化开发
    • 小程序开发
  • 项目实战
  • 附录

附录

# 附录

主要介绍3D平台二开时常用的接口、API、类以及常量等内容。

# Interface

主要包括设备接口、设备图标接口、UI控件接口以及UI弹窗/面板接口。

设备接口

设备接口:IDevice

  1. 属性

    • IsCameraMoved:bool类型,表示摄像机是否移动。

    • DeviceLogic:DeviceLogic类型,表示绑定的设备。

    • YcItemDatas:List<YcItemData>类型,表示设备的遥测点列表。

    • YxItemDatas:List<YxItemData>类型,表示设备的遥信点列表。

      提示

      YcItemData和YxItemData可以参考本节关于常用类介绍部分的内容

  2. 方法

    • CameraMoved:摄像机移动到设备最佳视角时。

    • CameraLeaved:摄像机离开设备时。

    • Show:显示设备时。

    • Hide:隐藏设备时。

    • Init:初始化设备时。

    • OnClick:点击设备时。

    • OnLocal:定位设备时。

    • SetAlarm:设置告警时。

    • Review:还原视角时。

    • Select:选中时。

    • UnSelect:取消选中时。

    • AnimationPlay:动画播放时。

设备图标接口

设备图标接口:IDeviceIcon

方法:

  1. OnInit:初始化时。

  2. OnIconClick:图标点击时。

  3. SetState:状态刷新时。

  4. MouseEnter:鼠标进入时。

  5. MouseExit:鼠标离开时。

  6. OnSelect:选中时。

  7. UnSelect:取消选中时。

  8. SetAlarm:设置告警时。

  9. Show:显示时。

  10. Hide:隐藏时。

UI控件接口

UI控件接口:IUIControl

方法:

  1. OnInit:初始化。

  2. OnOpen:UI显示。

  3. OnClose:UI隐藏。

UI弹窗/面板接口

UI控件接口:IUIForm

  1. 属性

    • SerialId:int类型,表示获取界面序列编号。

    • UIFormAssetName:string类型,表示获取界面资源名称。

    • Handle:object类型,表示获取界面实例。

    • UIGroup:IUIGroup类型。表示获取界面所属的界面组。

    • DepthInUIGroup:int类型,表示获取界面在界面组中的深度。

    • PauseCoveredUIForm:bool类型,表示获取是否暂停被覆盖的界面。

  2. 方法:

    • OnInit:初始化。

    • OnRecycle:恢复界面时。

    • OnOpen:打开界面时。

    • OnClose:关闭界面时。

    • OnPause:暂停界面时。

    • OnResume:恢复界面时。

    • OnCover:覆盖界面时。

    • OnReveal:显示界面时。

    • OnRefocus:聚焦界面时。

    • OnUpdate:更新界面时。

    • OnDepthChanged:层级发生变化时。

# API

IoTCenter3D提供的可调用接口。包括DeviceModule、RPCModule、SceneModule以及UIModule。

使用以上接口时需添加IoT3D.Framework引用

using IoT3D.Framework
DeviceModule
  1. 属性

    /// <summary>
    /// 选中的设备
    /// </summary>
    DeviceLogic SelectionDevice { get; set; }
    
    /// <summary>
    /// 当前的设备
    /// </summary>
    DeviceLogic CurrentDevice { get; set; }
    
    /// <summary>
    ///  设备选中变化事件
    /// </summary>
    event Action<DeviceLogic> DeviceSelectChanged;
    
  2. 方法

    /// <summary>
    /// 获取所有已部署的设备
    /// </summary>
    /// <returns></returns>
    List<DeviceLogic> GetAllDevice();
    
    /// <summary>
    /// 通过设备号获取一个设备
    /// </summary>
    /// <param name="equipNo"></param>
    /// <returns></returns>
    DeviceLogic GetDeviceByEquipNo(int equipNo);
    
    /// <summary>
    /// 获取设备模板数据
    /// </summary>
    /// <param name="resId"></param>
    /// <returns></returns>
    DeviceDataModel GetDeviceResData(string resId);
    
    /// <summary>
    /// 实例化设备图标
    /// </summary>
    /// <param name="deviceIcon">自定义图标</param>
    /// <returns></returns>
    GameObject InstantiateIcon(IDeviceIcon deviceIcon);
    
    /// <summary>
    /// 实例化默认设备图标
    /// </summary>
    /// <returns></returns>
    GameObject InstantiateIcon();
    
    /// <summary>
    /// 注册一个设备
    /// </summary>
    /// <param name="device"></param>
    void RegisterDevice(DeviceLogic device);
    
    /// <summary>
    /// 取消注册一个设备
    /// </summary>
    /// <param name="device"></param>
    void UnRegisterDevice(DeviceLogic device);
    
    /// <summary>
    /// 选中一个设备
    /// </summary>
    /// <param name="device">设备</param>
    void OnSelectionDevice(DeviceLogic device);
    
    /// <summary>
    /// 取消选中一个设备
    /// </summary>
    /// <param name="device">设备</param>
    void UnSelectDevice(DeviceLogic device);
    
RPCModule
  1. GetYcValueData

    /// <summary>
    /// 获取遥测数据
    /// </summary>
    /// <param name="equipNo">设备号</param>
    /// <param name="ycNo">遥测号</param>
    /// <returns>string</returns>
    Task<string> GetYcValueData(int equipNo, int ycNo);
    

    示例

    //获取1000号设备的1号测点数据
    _ = await RPCModule.Rpc.GetYcValueData(1000, 1);
    
  2. GetYxValueData

    /// <summary>
    /// 获取遥信数据
    /// </summary>
    /// <param name="equipNo">设备号</param>
    /// <param name="ycNo">遥信号</param>
    /// <returns>string</returns>
    Task<string> GetYxValueData(int equipNo, int ycNo);
    

    示例

    //获取1000号设备的1号遥信数据
    _ = await RPCModule.Rpc.GetYxValueData(1000, 1);
    
  3. GetYcpListItemAsync

    /// <summary>
    /// 获取设备所有遥测列表
    /// </summary>
    /// <param name="equipNo">设备号</param>
    /// <returns>List<YcItemData></returns>
    Task<List<YcItemData>> GetYcpListItemAsync(int equipNo);
    

    示例

    //获取1000号设备
    _ = await RPCModule.Rpc.GetYcpListItemAsync(1000);
    
  4. GetYxpListItemAsync

    /// <summary>
    /// 获取设备所有遥信列表
    /// </summary>
    /// <param name="equipNo">设备号</param>
    /// <returns>List<YxItemData></returns>
    Task<List<YxItemData>> GetYxpListItemAsync(int equipNo);
    

    示例

    //获取1000号设备
    _ = await RPCModule.Rpc.GetYcpListItemAsync(1000);
    
  5. GetAsyncSQLData

    /// <summary>
    /// 获取数据库表数据
    /// </summary>
    /// <typeparam name="T">Json 序列化类</typeparam>
    /// <param name="sql">查询Sql语句</param>
    /// <returns></returns>
    Task<T> GetAsyncSQLData<T>(string sql);
    

    示例

    List<Model> Models = await RPCModule.Rpc.GetAsyncSQLData<List<Model>>("select ID,Name from GW_Models");
        
    public class Model
    {
        public string ID;
        public string Name;
    }
    
  6. SetParam

    /// <summary>
    /// 执行设备控制命令
    /// </summary>
    /// <param name="s_no">设备号</param>
    /// <param name="n_no">控制命令号</param>
    void SetParam(int s_no, int n_no);
    
    /// <summary>
    /// 执行设备控制命令
    /// </summary>
    /// <param name="s_no">设备号</param>
    /// <param name="n_no">控制命令号</param>
    /// <param name="s_value">参数</param>
    void SetParam(int s_no, int n_no, string s_value);
    

    示例

    RPCModule.Rpc.SetParam(1000,1,"value");
    
  7. GetDataFromCurveAsync

    /// <summary>
    /// 获取测点历史数据
    /// </summary>
    /// <param name="dateTimes">时间数组</param>
    /// <param name="eqNo">设备号</param>
    /// <param name="ycNo">遥测号</param>
    /// <param name="type">测点类型</param>
    /// <returns></returns>
    Task<List<myCurveData>> GetDataFromCurveAsync(List<DateTime> dateTimes, int eqNo, int ycNo, string type = "C");
    
  8. GetChangedDataFromCurveAsync

    /// <summary>
    /// 获取已变化的测点历史数据
    /// </summary>
    /// <param name="bgn">开始时间</param>
    /// <param name="end">结束时间</param>
    /// <param name="eqNo">设备号</param>
    /// <param name="ycNo">遥测号</param>
    /// <param name="type">测点类型</param>
    /// <returns></returns>
    Task<List<myCurveData>> GetChangedDataFromCurveAsync(DateTime bgn, DateTime end, int eqNo, int ycNo, string type = "C");
    
SceneModule
  1. CurrentSceneNode属性。

    /// <summary>
    /// 当前场景
    /// </summary>
    public static SceneNode CurrentSceneNode { get; }
    

    示例

    //打印当前场景名称
    Debug.log(SceneModule.CurrentSceneNode.name);
    
  2. LoadScene方法

    /// <summary>
    /// 加载场景
    /// </summary>
    /// <param name="sceneName">场景名称</param>
    public static void LoadScene(string sceneName);
    

    示例

    //加载首页场景
    SceneModule.LoadScene("首页");
    
  3. GetSceneNode方法

    /// <summary>
    /// 获取指定场景
    /// </summary>
    /// <param name="sceneName">场景名称</param>
    /// <returns></returns>
    public static SceneNode GetSceneNode(string sceneName);
    

    示例

    //获取首页所有设备
    var devs = SceneModule.GetSceneNode("首页").DeviceRoot.GetDevices<DeviceLogic>();
    
  4. SetCameraActive方法

    /// <summary>
    /// 控制摄像机是否可以交互
    /// 如 鼠标控制缩放、旋转、平移等
    /// </summary>
    /// <param name="active"></param>
    public static void SetCameraActive(bool active);
    

    示例

    //取消交互画面会固定住
    SceneModule.SetCameraActive(false);
    
  5. SetCameraPoint方法

    /// <summary>
    /// 设置摄像头位置
    /// </summary>
    /// <param name="pos">坐标</param>
    /// <param name="rot">旋转角度</param>
    /// <param name="centerpoint">中心点位置</param>
    /// <param name="speed">速度</param>
    public static void SetCameraPoint(Vector3 pos, Vector3 rot, Vector3 centerpoint, float speed = 0)
    
  6. AddSceneChangedListener

    /// <summary>
    /// 切换场景时回调
    /// </summary>
    /// <param name="unityAction">回调方法</param>
    public static void AddSceneChangedListener(UnityAction<SceneNode> unityAction);
    

    示例

    SceneModule.AddSceneChangedListener(OnSceneEnterChanged);
    
    void OnSceneEnterChanged(SceneNode sceneNode)
    {
        Debug.log(sceneNode.name);
    }
    
UIModule
  1. OpenUIForm。该接口可以打开所有构建在uiforms.assetbundle里的UI资源。

    /// <summary>
    /// 打开指定UI面板
    /// </summary>
    /// <param name="uiFormAssetName">UI名称</param>
    /// <param name="groupName">UI层级</param>
    /// <returns>IUIForm</returns>
    public static IUIForm OpenUIForm(string uiFormAssetName, string groupName)
    
    /// <summary>
    /// 打开指定UI面板
    /// </summary>
    /// <param name="uiFormAssetName">UI名称</param>
    /// <param name="groupName">UI层级</param>
    /// <param name="userData">UI面板接收的数据</param>
    /// <returns>IUIForm</returns>
    public static IUIForm OpenUIForm(string uiFormAssetName, string groupName, object userData)
    

    示例

    //打开TimeselectorForm界面,层级为Dialog,传输数据为当前脚本对象
    IUIForm uIForm = UIModule.OpenUIForm("TimeselectorForm", "Dialog", this);
    
  2. CloseUIForm。

    /// <summary>
    /// 关闭指定页面
    /// </summary>
    /// <param name="uIForm">要关闭的UI</param>
    public static void CloseUIForm(IUIForm uIForm)
    

    示例

    IUIForm uIForm = UIModule.OpenUIForm("TimeselectorForm", "Dialog", this);
    
    if (uIForm != null)
    UIModule.CloseUIForm(uIForm);
    

# Class

在编写脚本时可能需要使用的一些最常用和最重要的IoTCenter3D内置类。包括DeviceLogic、DeviceBase、DeviceDataModel、DeviceIconBase、DeviceUIFormBase、RealTimeValue、SceneNode、UIControl、UIFormLogic、YcItemData以及YxItemData。

DeviceLogic

设备基类,所有设备必须显式派生DeviceLogic类。该类继承自MonoBehaviour (opens new window)类。

  1. 变量

    • IsWar:bool类型,表示是否是报警状态。

    • IsShow:bool类型,你表示是否是显示状态。

    • deviceData:DeviceDataModel类型,表示设备可保存数据,用于下次打开后初始化。

    • ExceedDistance:float类型,表示摄像机和设备的安全距离,当摄像机远离设备时,如果超过设置的距离,会调用CameraLeaved()。

    • m_Animation:Animation类型。

    • Locking:bool类型。

    • IsContainer:bool类型。

    • m_Icon:Sprite类型,表示设备图标。

    • Device:IDevice类型,表示IoT设备对象。

    • DeviceResData:DeviceDataModel类型,表示获取用户配置的数据。

  2. 方法

    • Awake:在加载脚本实例时调用,查看详情 (opens new window) 。

    • Start:查看详情 (opens new window)。

    • Init:初始化设备。

    • Show:显示设备。

    • OnClick:点击设备图标时执行。

    • Hide:隐藏设备。

    • OnLocal:定位设备时调用。

    • CameraMoved:摄像机移动到设备位置时调用。

    • CameraLeaved:摄像机离开设备时调用。

    • AnimationPlay

    • SetAlarm:设备图标报警状态。

    • OnInitialized

DeviceBase

设备自定义基类,设备的基本功能实现,所有自定义设备都可以派生自该类,二次开发也可以重写实现逻辑。继承自DeviceLogic类。

  1. 变量

    • DeviceFormId:DeviceFormId类型,表示UI弹窗面板枚举,点击设备时所弹出的UI弹窗。

    • m_DeviceForm:IUIForm类型,表示点击设备时所弹出的UI弹窗对象。

    • m_DeviceAlarmForm:DeviceAlarmUIForm类型。

    • UseDefaultIocn:bool类型。

    • DeviceIconTemplate:DeviceIconBase类型,表示设备图标模板。

    • ClassifyShow:bool类型。

    • DeviceAlarmForm IUIForm类型。

  2. 方法

    • Init:初始化设备

    • Start:查看详情 (opens new window)

    • OnClick:点击设备时调用。

    • Show:显示设备。

    • Hide:隐藏设备。

    • CameraMoved:摄像机移动到设备位置时调用。

    • CameraLeaved:摄像机离开设备时调用。

    • OnLocal:定位设备时调用。

    • Update:每帧调用Update,查看详情 (opens new window)。

    • ShowDeviceIcon:显示设备图标。

    • HideDeviceIcon:隐藏设备图标。

    • SetAlarm:设备图标报警状态。

DeviceDataModel

设备可保存的数据,该类用于持久化数据,用户所编辑的数据都会被保存为JSON (opens new window)格式的文件,编辑数据文件存放在\IoTCenter 3D\IoTCenter 3D_Data\StreamingAssets\Data目录下。

  1. 变量

    • EquipNo:int类型,表示对应IoT平台中的设备号。

    • YcyxNo:int类型,表示对应IoT平台中的设备的遥测遥信号。

    • DataType:EquipDataType(Equip|YC|YX)类型,表示当前设备所绑定测点的类型。

    • Name:string类型,表示设备名称。

    • ShowName:string类型,你表示鼠标移动到图标上的名称。

    • m_Desc:string类型,表示设备介绍。

    • ResId:string类型,表示设备对应的资源Id。

    • BestViewPos:Vector3 (opens new window)类型,表示设备的位置。

    • BestViewRot:Vector3 (opens new window)类型,表示设备的旋转。

    • ValueCMD:string类型,表示设备的设置命令。

    • SetParams:List<SetParamData>类型。表示绑定设备设置点集合。

    • EquipData:EquipRelateData类型。

    • AutoLocal:bool类型。

    • RelatedVideo:string类型。

  2. 方法

    • SetResId:设置设备对应的资源Id。
DeviceIconBase

设备图标基类,继承MonoBehaviour (opens new window)类,并实现了IDeviceIcon接口。

  1. 变量

    • Icon:Image类型,表示设备图标文件。

    • Device:DeviceLogic类型,表示设备。

  2. 方法

    • OnInit:初始化图标。

    • OnIconClick:点击设备图标时调用。

    • Show:显示图标。

    • Hide:隐藏图标。

    • MouseEnter:鼠标进入图标时。

    • MouseExit:鼠标离开图标时。

    • OnSelect:图标选中时。

    • UnSelect:取消选中时。

    • SetState:刷新状态时。

DeviceUIFormBase

UI弹窗基类,继承UIFormLogic类。

RealTimeValue

根据IoTCenter平台上设置的类型,返回不同的数据格式,拥有以下属性:

  1. StringValue:string类型,表示字符串类型数据

  2. DoubleValue:double类型,表示浮点数类型数据,

  3. Temp:int类型,表示整数类型数据。

  4. BoolValue:bool类型,表示布尔类型数据。

SceneNode

场景对象,拥有以下属性:

  1. UiPageRoot:DeviceNodeBase类型,表示UI节点根目录。

  2. DeviceRoot:DeviceNodeBase类型,表示Device节点根目录。

  3. Loaded:bool类型,表示完成加载。

  4. SceneName:string类型,表示场景名称。

  5. SceneId:string类型,表示场景ID。

  6. ShowNavButton:bool类型,表示是否显示导航按钮。

SceneNode

UI控件基类,所有UI控件必须显式派生自UIControl类。

  1. 变量

    • uIResEnum:UIResEnum枚举类型,表示UI面板分类。

    • rectTransform:RectTransform类型,查看详情 (opens new window)。

    • RectCanvas:Canvas类型,表示包含当前UI的Canvas。

    • IsOpen:bool类型,表示是否是显示状态。

    • Name:string类型,表示UI面板的名称。

    • ResId:string类型,表示UI控件的资源Id。

  2. 方法

    • OnSerialized:数据序列化完成。

    • SetAllDirty

    • OnInit:初始化。

    • OnOpen:打开面板。

    • RefreshData

    • UpdateUI

    • OnClose:关闭面板。

    • OnCloseAll

  3. UIResEnum枚举

    • Basics:基本。

    • None:无。

    • Other:其他。

    • Custom:定制化。

    • LineChart:折线图。

    • CurveChart:曲线图。

    • PieChart:饼图。

    • RingChart:环形图。

    • BarChart:柱状图。

    • Button 按钮。

    • BackgroundBlock:图片。

    • Text:文本。

    • List:列表。

    • Navigation:按钮。

    • Video:视频。

UIFormLogic

UI弹窗基类,所有UI弹窗必须显式派生自UIFormLogic。该类继承自MonoBehaviour (opens new window)。

  1. 变量

    • DepthFactor:int类型。

    • OriginalDepth:int类型

    • Depth:int类型。

  2. 方法

    • SetMainFont

    • OnInit:初始化

    • OnRecycle:恢复界面时

    • OnOpen:打开界面时

    • OnClose:关闭界面时

    • OnPause:暂停界面时

    • OnResume:恢复界面时

    • OnCover:覆盖界面时

    • OnReveal:显示界面时

    • OnRefocus:聚焦界面时

    • OnUpdate

    • OnDepthChanged:层级发生变化时

    • SetAlarm:设置告警时

YcItemData

IoTCenter的遥测点对象,拥有以下属性:

  1. YcValue:RealTimeValue类型,表示实时值。

  2. EquipNo:int类型,表示设备号。

  3. Bufang:bool类型,表示是否布防。

  4. YcNo:int类型,表示遥测号。

  5. YcName:string类型,表示遥测名称。

  6. Unit:string类型,表示遥测点的单位。

  7. RelatedVideo:string类型,表示关联视频。

  8. RelatedPic:string类型,表示关联图片。

  9. ZiChanID:string类型,表示资产ID。

  10. PlanNo:string类型,表示计划编号。

  11. IsAlarm:bool类型,表示是否告警。

  12. AdviceMsg:string类型,表示通知消息。

  13. HasHistoryCcurve:bool类型,表示是否有历史曲线。

  14. EquipState:int类型,表示设备状态。

YxItemData

IoTCenter的遥信点对象,拥有以下属性:

  1. YXValue:RealTimeValue类型,表示实时数据。

  2. EquipNo:int类型,表示设备号。

  3. Bufang:bool类型,表示是否布防。

  4. YXNo:int类型,表示遥信号。

  5. YxName:string类型,表示遥信名称。

  6. State:string类型,表示状态名称。

  7. RelatedVideo:string类型,表示关联视频。

  8. RelatedPic:string类型,表示关联图片。

  9. ZiChanID:string类型,表示资产ID。

  10. PlanNo:string类型,表示计划编号。

  11. IsAlarm:YXAlarm类型,表示是否告警。

  12. AdviceMsg:string类型,表示通知消息。

  13. HasHistoryCcurve:bool类型,表示是否有历史曲线。

  14. EquipState:int类型,表示设备状态。

# 常量

主要介绍IoTCenter3D平台中常用的固定参数。

设备
  1. AssetBundles信息

    开发者需要按照规定设置设备预制体的AssetBundleName和AssetBundleVariantName

    • AssetBundleName:必须为deviceres。

    • AssetBundleVariantName:必须为assetbundle。

  2. AssetBundles路径

    当开发者在Unity中构建AssetBundles包后,将构建后的AssetBundles放在\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices\deviceres.assetbundle路径。

UI控件
  1. AssetBundles信息

    开发者需要按照规定设置UI控件预制体的AssetBundleName和AssetBundleVariantName

    • AssetBundleName:必须为uicontrols。

    • AssetBundleVariantName:必须为assetbundle。

  2. AssetBundles路径

    当开发者在Unity中构建AssetBundles包后,将构建后的AssetBundles放在\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices\uicontrols.assetbundle路径下。

UI弹窗
  1. AssetBundles信息

    开发者需要按照规定设置UI弹窗预制体的AssetBundleName和AssetBundleVariantName

    • AssetBundleName:必须为uiforms。

    • AssetBundleVariantName:必须为assetbundle。

  2. AssetBundles路径

    当开发者在Unity中构建AssetBundles包后,将构建后的AssetBundles放在\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Devices\uiforms.assetbundle路径下。

dll
  1. dll编译文件

    当开发者在IDE (opens new window)(如Visual Studio (opens new window)、Visual Studio Code (opens new window))或者文本编辑器 (opens new window)里写完代码后,Unity会开始编译代码 (opens new window),并会在该目录 (opens new window)(\Library\ScriptAssemblies)下生成项目中所有程序集的dll文件

  2. dll路径

    当开发者在Unity中编写的代码都需要放在Scene.Module程序集里,将编译后的Scene.Module.dll文件放在\IoTCenter 3D_Data\Managed\Scene.Module.dll路径

场景
  1. AssetBundles信息

    开发者需要按照规定设置场景的AssetBundleName和AssetBundleVariantName

    • AssetBundleName:必须为确保名称唯一并且是全部小写(如scene_1)。

    • AssetBundleVariantName:必须为assetbundle。

  2. AssetBundles路径

    当开发者在Unity中构建AssetBundles包后,将构建后的AssetBundles放在\IoTCenter 3D_Data\StreamingAssets\AssetBundle\Scenes路径下。

编辑数据

用户在编辑模式保存后,所有数据都会保存在\IoTCenter 3D_Data\StreamingAssets\Data路径下,包括设备、场景、UI。

# FAQ

  1. 安装编辑器工具出错。

    这种问题通常来自于开发者按照编辑器工具安装文档进行安装,但是还没有单独提供编辑器工具压缩包,默认集成在二次开发包里。

  2. 制作的UI控件在IOT平台无法点击。

    建议开发者使用编辑器工具创建 UI 控件,因为编辑器工具将一些必须设置的重复操作都自动完成,开发者直接在生成后的预制体内制作UI即可。

    已知会导致该问题的情况:根节点不对,将Canvas制作成UI控件根节点。

    解决方法如下:

    • 删除Graphic Raycaster组件。

    • 使用Canvas里的子节点制作预制体,如上图就是Button作为预制体的根节点。

  3. 可以使用哪些版本的 Unity?

    2021以上版本均支持。

  4. 是否可以使用自己创建的Camera

    对于Camera有提供接口SetCameraActive取消Camera的控制逻辑。示例如下:

    Camera camera = Camera.main;
    // Add this line
    camera.gameObject.SetActive(false); 
    

    但是并不建议这样做,因为IoTCenter3D平台的多个功能与Camera关联,关闭后会导致某些问题。

    注意:

    已知问题如下:

    • 切换场景Camera无法移动
    • 设备图标无法正常显示
上次更新: 5/22/2023, 7:05:49 PM

← 开发实战 界面组态→

目录
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式