虚拟实验室-Unreal 版本

虚拟实验室的Unreal 版本,第一个版本主要是以《探究通电螺线管外部的磁场分布》颗粒为例,设计和开发一个正式版本。


旋转动画组件

<p>[TOC]</p> <table> <thead> <tr> <th>作者</th> <th>QFord(350107)</th> </tr> </thead> <tbody> <tr> <td>更新日期</td> <td>2024-6-13</td> </tr> <tr> <td>版本</td> <td>V1.1.1</td> </tr> </tbody> </table> <h2>组件-旋转动画组件</h2> <h3>策划设计案</h3> <p>2024-6-12:原有设计案地址已无法访问,已反馈策划。 沈秋娟(小仙女) 2024/6/12 16:59:49 <a href="https://lanhuapp.com/link/#/invite?sid=qXllMKXa">https://lanhuapp.com/link/#/invite?sid=qXllMKXa</a></p> <p>&gt; 此策划设计案主要是用于旋转交互的设计,而本组件-<strong>旋转动画组件</strong>主要是旋转动画表现相关的,不含交互。</p> <h3>组件能力描述</h3> <p>此组件可控制目标对象的旋转表现</p> <h3>组件设计描述</h3> <p>组件的设计,在源头就需要抓清楚,抽象合理。如果将组件设计为小磁针动画组件,光从名字上看,就已经不合理了。小磁针动画组件,是专门针对小磁针而定制不具备通用性,这种组件不做也罢,如果做了就只服务于小磁针,没有必要浪费人力。我们在执行上,要坚持避免任何不合理抽象找借口,如果连组件名字都不能取准确,那这个组件根本没必要开发了。 而在抽象层面,至少应该往上提一个层级,比如抽象为旋转动画组件,这个组件可以拥有输入参数旋转终点向量、旋转速度、是否抖动等等,而这样设计,基本上可以覆盖大部分的旋转业务,比如小磁针的旋转、所有指针类的偏转(电流表、电压表、灵敏电流计)等等。</p> <h3>组件接口和参数描述</h3> <pre><code class="language-cpp">  /**      * 旋转目标(Unreal中的节点目标)      */     SceneCompoment Target; /**      * 旋转终点向量      */ FVector EndRotationVector;  /**      * 是否支持抖动      */     bool bEnableJitter = false; /**      * 当前旋转角度([0,360]度)      */     float CurrentAngle; /**      * 执行 旋转动画 * Angle:旋转的欧拉角      */ void Rotate(float Angle) /**      * 执行 旋转动画 * Angle:旋转的欧拉角 * AngularVelocity:角速度      */ void Rotate(float Angle, float AngularVelocity) /**      * 暂定 旋转动画      */ void Pause() /**      * 恢复 旋转动画      */ void Resume() /**      * 停止 旋转动画      */ void Stop() // 定义多播委托,无返回值,带一个float参数表示旋转欧拉角度 //UE的多播委托是使用宏DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam来定义 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRotationStarted, float, StartAngle); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRotationInProgress, float, CurrentAngle); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRotationEnded, float, EndAngle); </code></pre> <h3>组件业务规则</h3> <ol> <li>调用组件的Rotate后,当动画播放播放未结束,再次调用Rotate,则终止动画播放,转而播放新的旋转动画。</li> </ol> <h3>组件补充说明</h3> <ol> <li>旋转轴由<strong>约束组件</strong>负责处理</li> <li>档位设定由<strong>交互组件</strong>负责处理</li> <li>此组件主要负责旋转动画表现</li> </ol> <h3>组件用例描述</h3> <ul> <li>用例1:此组件可用于控制小磁针在磁场作用下的旋转表现。它能够根据磁场的方向和强度,动态调整磁针的旋转角度。 组件通过从器材那边获取到的磁学引擎提供的目标旋转向量,逐步调整磁针的方向以模拟真实的物理效果。</li> </ul> <p>&gt; </p> <ol> <li>小磁针器材负责获取磁学引擎提供的<strong>旋转终点向量</strong>数据,并向[旋转动画组件]提供。</li> <li>小磁针偏转表现,通过器材直接设定角速度参数是不合适的。计算小磁针在磁场中的偏转速度,可以使用角度差和对应的时间差来计算。</li> <li>已有小磁针的偏转的旋转的deltaAngle算法总结如下: 3.1:获取当前磁场向量,通过磁学引擎组件获取 3.2:计算目标向量:将磁场向量投影到小磁针的本地Y轴平面上,得到目标向量 3.3:判断目标向量变化:如果目标向量发生变化,重新计算晃动后的目标向量 3.4:计算旋转角度:计算从当前向量到目标向量的旋转角度 3.5:计算旋转的deltaAngle</li> </ol> <ul> <li>用例2:此组件也可用于指针类偏转的表现,如电流表、电压表和灵敏电流计。</li> </ul>

页面列表

ITEM_HTML