0基础开始学UE——在UE中创建一个可以旋转的门

1.创建一个可以旋转的门(单向)

Step 1:准备门资产与碰撞设置

  1. 在素材库 Fab 中导入门的相关资产(纹理、材质、网格体、门框等)。

  2. 设置碰撞(关键):双击打开门的静态网格体资产。在编辑器左上角将“查看模式”改为 玩家碰撞 (Player Collision),检查是否有绿色线框(碰撞体)。如果没有,在右侧面板的 凸包分解 (Convex Decomposition) 中点击应用 (Apply) 自动创建碰撞。(如果漏掉这一步,角色在游戏中就能直接穿模穿过门)

Step 2:构建蓝图组件

  1. Code/Door 文件夹下,新建一个Actor蓝图类,命名为 BP_Door

  2. 进入蓝图编辑器,在左侧组件面板中点击 添加 (Add),添加两个静态网格体 (Static Mesh) 组件,分别命名为 DoorFrame(门框)和 Door(门扇)。

    3. 在右侧细节面板中,为它们指定刚才导入的 Fab 网格体资产,并调整好门扇在门框中的相对位置。

    4.添加触发区域:继续点击添加 盒体碰撞 (Box Collision) 组件。在细节面板中调整其盒体半高/半径 (Box Extent),使其覆盖门前后的交互区域。(注意:调整范围时要修改 Box Extent 属性,不要直接缩放 Transform 的 Scale,否则会导致碰撞体变形)

Step 3:编写开关门逻辑

  1. 选中 Box 组件,在右侧细节面板最下方找到并点击 On Component Begin Overlap(组件开始重叠时)和 On Component End Overlap(组件结束重叠时)的绿色加号,将它们添加至事件图表。

        上方的是开始时的主线,下方是结束时的主线。

  1. 在事件图表中右键搜索并添加 Add Timeline(添加时间轴) 组件,双击进入时间轴面板:
  • 点击左上角 f 图标添加一条浮点型轨道,命名为 Opendoor

  • 将时间轴的 长度 (Length) 设置为 2.0 秒。

  • 右键曲线添加两个关键帧:(0, 0)(1, 90)。代表开始时旋转为0,1秒时旋转到90度,剩下1秒保持开启,实现延时关门效果。

  1. 回到事件图表,将 Begin Overlap 连接到时间轴的 Play(播放),将 End Overlap 连接到时间轴的 Reverse(倒回)

  2. 拉出时间轴的 Update(更新) 执行引脚,连接到 Set Relative Rotation(设置相对旋转) 节点,目标指定为 Door 组件。

  3. OpenValue 引脚连接到旋转体的 Z 轴 (Yaw)(可以右键旋转引脚选择“分割结构体引脚”单独连接 Z 轴)

2.创建一个双向旋转的门

核心原理

单向门无论玩家从哪一侧进入都会朝固定方向开。为了实现“人推门永远向前开”的效果,我们需要计算玩家相对于门的位置关系

在视口中跳到顶视图,发现进入门是Y轴,所以我们需要获取门的Y轴坐标以及角色的Y轴坐标来控制门的旋转,调整旋转角度发现门旋转90°时,朝向是Y轴正半轴,所以由人指向门的向量应该是正的,另一边则是反的,现在我们可以去调整蓝图了。

详细步骤

  1. 获取位置坐标:在事件图表中添加 Get Actor Location 获取门的世界坐标;添加 Get Player Pawn 并拉出 Get Actor Location 获取玩家的世界坐标。

  2. 计算相对方向向量:添加减法节点(Subtract,类型设为 Vector),用门的坐标减去玩家的坐标(向量终点为门,起点为玩家),得到从玩家指向门的向量。

  3. 减法运算上方是被减数下方是减数

  1. 分解标量:使用 Break Vector(分解向量) 将结果拆分为 X、Y、Z。根据我们在顶视图中的观察,这里我们需要判断 Y 轴的数值。

  2. 条件分支判断:使用 Greater(大于) 节点判断 Y > 0 是否成立,并将返回的布尔值连接到 Branch(分支) 节点。

  3. 动态改变旋转方向

    • 新建一个浮点型变量 Direction

    • 当 Branch 为 True 时,使用 Set Direction 设置为 1.0

    • 当 Branch 为 False 时,设置 Direction-1.0

  4. 注入时间轴:在时间轴输出的 OpenValue 后面连接一个 Multiply(乘法) 节点,将轨道值乘以 Direction 变量,然后再传给 Set Relative Rotation 的 Z 轴。至此这个门的逻辑就造好了。下面是总的接线:

上述方法在门处于默认朝向时工作完美。但如果将门在关卡中旋转90度摆放,基于世界坐标的 Y > 0 判断就会失效。更完美的做法是使用 Transform Location(将世界坐标转换为局部坐标) 节点,将玩家的绝对位置转换为相对于 BP_Door 的局部位置,此时只需要判断局部坐标的 X 或 Y 正负即可,该逻辑将不受门自身摆放角度的影响!

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力建模、控制律设计与推力分配模块。在习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值