实验用品编辑器说明文档

实验用品编辑器说明文档


定制UI-技术方案

<p>[TOC]</p> <table> <thead> <tr> <th>作者</th> <th>赖俊贤、林七佛</th> </tr> </thead> <tbody> <tr> <td>最后修订日期</td> <td>2023-12-6</td> </tr> <tr> <td>版本</td> <td>V 1.3.0</td> </tr> </tbody> </table> <h1>原始需求</h1> <p>物件播放组件,提供一套默认的UI用于操作[器材相关的业务],如观察器材、打开器材参数面板等。 定制UI的要求是:使用方可以使用自己设计的UI,并也能操作上述的[器材相关的业务]。 &gt; 物件播放组件的定制UI业务,和风格化无直接关系</p> <h1>方案核心</h1> <p>物件播放组件加载的UI预制,可以是默认的,也可以是第三方自行设计的。</p> <h1>[物件播放器]定制UI-技术方案</h1> <p>定制UI(风格化)是通过一些UI控件的基本元素来控制的,主要包括:</p> <ul> <li>颜色</li> <li>字体</li> <li>图像</li> <li>布局</li> <li>动画</li> <li>音效</li> </ul> <p>本技术方案将以&lt;span style=&quot;color: red;&quot;&gt;颜色&lt;/span&gt;为例,来展开说明。 &gt; 实际开发中,将根据需求来扩展需要支持的元素,本版本将实现的基本元素:颜色。</p> <h2>方案一:基于独立的风格化预制体</h2> <p><strong>方案描述:</strong> 每种业务类型的UI界面都对应独立的预制。 例如:器材介绍面板_StyleA.prefab , 器材介绍面板_StyleB.prefab 。</p> <p>效果图,如下所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=16a23f6e450359034d805e3428617bbe&amp;amp;file=file.png" alt="" /></p> <h3>优点:</h3> <ul> <li>开发代码量少</li> <li>预制可视化制作,所见即所得</li> <li>可最大程度兼容UI风格化设计的差异性,适用于兼容PC Desktop端和VR端。</li> </ul> <h3>缺点:</h3> <ul> <li>需要制作不同的预制体并绑定对应业务脚本</li> <li>若UI和风格较多,后期修改维护成本高</li> <li>风格化已经提前设定,使用方再额外修改比较麻烦</li> </ul> <h2>方案二:基于配置文件</h2> <p><strong>方案描述:</strong> 将UI控件的属性和数据进行可配置化改造,通过描述文件存储UI的外观表现。</p> <p>类似这样的文件: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b459a44d0e61ce425354b6cb5b08ef41&amp;amp;file=file.png" alt="" /></p> <h3>优点:</h3> <ul> <li>灵活简便,配置文件格式可以根据需求定义</li> <li>一套风格只需要定义一个配置文件,便于管理</li> <li>可将配置文件和相关UI资源打包成一个资源包,支持热更</li> </ul> <h3>缺点:</h3> <ul> <li>不直观,无法所见即所得</li> <li>风格化配置文件创建和修改比较麻烦,想提高效率需要另外开发配置编辑工具</li> </ul> <h2>方案三:基于代码接口</h2> <p><strong>方案描述:</strong> 直接通过代码控制UI风格</p> <pre><code class="language-csharp"> /// &amp;lt;summary&amp;gt; /// 器材点击UI风格化配置 /// &amp;lt;/summary&amp;gt; public class EquipInteraction1WndStylizedConfig { /// &amp;lt;summary&amp;gt; /// 上半部分背景图片配置 /// &amp;lt;/summary&amp;gt; public ImageStylizedConfig UpBgImageStyle; /// &amp;lt;summary&amp;gt; /// 下半部分背景图片配置 /// &amp;lt;/summary&amp;gt; public ImageStylizedConfig DownBgImageStyle; } public void ChangeUIStyle() { EquipInteraction1WndStylizedConfig equipInteraction1WndStylizedConfig = new EquipInteraction1WndStylizedConfig() { UpBgImageStyle = new ImageStylizedConfig() { Color = Color.red }, DownBgImageStyle = new ImageStylizedConfig() { Color = Color.red } }; UIStyleManager.Instance.EquipInteraction1Wnd_StylizedConfig = equipInteraction1WndStylizedConfig; UIStyleManager.Instance.ApplyStyle(); }</code></pre> <h3>优点:</h3> <ul> <li>较灵活,由外部调用,可实时修改效果</li> </ul> <h3>缺点:</h3> <ul> <li>不直观,使用方需要了解UI业务</li> <li>代码量大,不易维护</li> </ul> <h2>方案四:Unity-Theme</h2> <p><strong>方案描述:</strong>Unity 主题,主要通过可视化配置方式设定主题关联的颜色,这些设置被记录在配置文件中。同时提供了[颜色绑定]组件,各种类型的颜色绑定组件可以关联特定的UI控件,如Image、TMP和SpriteRenderer等。此方案,类似Unity编辑器使用的主题(如 图1-1所示)。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=07e7948968c68a4961a83e4a300d22ab&amp;amp;file=file.png" alt="" /> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=42f788b1fcfea83e4427915f63e9bf8c&amp;amp;file=file.png" alt="" /> &lt;center&gt;<strong>图1-1:Unity 编辑器主题</strong>&lt;/center&gt;</p> <p><strong>Unity-Theme</strong> 可视化配置: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0733476e90549bf83b333bb8c016f33d&amp;amp;file=file.png" alt="" /></p> <p><strong>运行效果图</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=cf2b5b17489bb29231d886114742df8d&amp;amp;file=file.png" alt="" /></p> <h3>优点:</h3> <ul> <li>较直观</li> <li>较灵活</li> <li>较规范</li> </ul> <h3>缺点:</h3> <ul> <li>该方案仅支持颜色主题,想要更多功能需要扩展</li> </ul> <h2>方案五:自定义预制+独立UI业务接口</h2> <p><strong>方案描述:</strong> 第三方可以使用自定义的预制来代替默认预制,然后功能接入原有业务功能。 组件需要提供对应的接口和事件,以观察器材为例: 1:提供点击器材的事件回调(含器材GUID、器材位置信息) <code>myVisualElement.RegisterCallBack&amp;lt;MouseDownEvent&amp;gt;(myFunction)</code> &gt; - GUID用于下个步骤使用,器材位置信息用于采用左键弹窗的时候的UI的位置计算</p> <ul> <li>事件回调的命名可以参考官方的UI Toolkit。</li> </ul> <p>2:观察器材接口(此接口需要器材GUID)</p> <h2>方案选型</h2> <p>~~对于虚拟实验室项目,Desktop端采用方案四比较合适,而VR端则必须选用方案一。 对于第三方接入的项目(如3D学习空间),采用方案3更合适,UI可以完全由第三方项目自由定制,而组件提供UI依赖的功能接口。~~ 经过和永弟讨论后,方案五更能满足原始需求,而其他的是适合UI主题的需求。</p>

页面列表

ITEM_HTML