将旋转朝向运动

本文探讨了在虚幻4(UE4)中,如何理解和使用'将旋转朝向运动'功能。通过实验,作者发现 pawn(character)与 actor 在旋转时的关系,并解释了在开启该功能后,如何通过控制器旋转影响角色朝向。实验展示了actor的旋转会根据鼠标输入和'将旋转朝向运动'调整,而pawn则不再转动,进一步揭示了UE4中的角色运动逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇日志是对第一篇的否定,即pawn不是角色脚底下相连的控制物,在人物蓝图中,pawn就是包括人物基础actor在内的character类,是个特殊的pawn。

公式pawn(character)=actor+controller

那个脚底下的东西应该是controller,但这个应该没有和actor连着

然后针对将旋转朝向运动的功能理解,我做了个量化比较实验。

首先要有三个打印文本

人物蓝图中的“获取控制旋转”

动画蓝图中的“获取控制旋转”与“获取actor旋转

 

 

 

 

 

 

 

 

 

**有点杂乱,不过不影响,这实现的功能就是人物根据”wasd“按键形成行走动画+头部随鼠标有左顾右盼上仰下探的动画动作

只需要关注”获取控制旋转“到后面的”打印文本“以及”获取actor“旋转到后面的打印文本

前提是除了第一张蓝图实现的”wasd“运动蓝图外外,你还编写好了靠鼠标变换视角的事件蓝图

然后先将摄像机设置全打勾(人物蓝图——springarm——细节面板——摄像机设置)

将chara

### 3D旋转运动插补算法概述 在三维空间中,旋转轴的插补通常涉及复杂的几何运算以及坐标变换。为了实现精确的路径规划和控制,常见的方法包括基于矢量分析、矩阵变换或者利用数值逼近技术(如泰勒级数展开)。以下是几种典型的插补算法及其应用: #### 圆弧插补 圆弧插补是一种常用的曲线插补方式,在二维平面上已经得到了广泛应用[^2]。将其扩展至三维空间时,可以通过定义旋转中心点 \(C\) 和半径 \(R\) 来描述一条完整的圆弧轨迹。 假设目标是从起点 \((X_s, Y_s, Z_s)\) 到达终点 \((X_e, Y_e, Z_e)\),并绕某一固定轴向量 \(\vec{n}\) 转动,则可以按照以下步骤计算中间位置: 1. **确定旋转角度** 计算两点之间的夹角 \(\theta\) 使用叉积公式:\[ \cos{\theta}=\frac{(X_e-X_s)(Y_e-Y_s)+(Z_e-Z_s)}{||P_{se}||} \] 2. **分段处理** 将整个圆周划分为若干个小段,每一段对应一个小的角度增量 \(\Delta\theta_i\) 。通过逐次累加这些微小变化来逐步接近最终目的地。 3. **更新当前位置** 对于每一帧时间间隔 t ,依据当前累积转过的总度数重新定位新的坐标系下的 X',Y' 及 Z 值,并映射回原始世界框架下得到实际移动后的物理座标。 ```python import math def spherical_interpolation(start_pos, end_pos, num_segments=100): """球面线性差值(Slerp),用于生成两个四元组间的均匀过渡序列""" q_start = start_pos / np.linalg.norm(start_pos) q_end = end_pos / np.linalg.norm(end_pos) dot_product = sum([a*b for a,b in zip(q_start,q_end)]) omega = acos(dot_product) sin_omega = sqrt(1-dot_product*dot_product) results = [] if abs(sin_omega)<epsilon: # 如果几乎共线则退化成LERP step_size=(end_pos-start_pos)/num_segments for i in range(num_segments+1): interpolated_point=start_pos+i*step_size results.append(interpolated_point.tolist()) else: factor_a=[sin((1-t)*omega)/sin_omega for t in linspace(0.,1.,num=num_segments)] factor_b=[sin(t*omega)/sin_omega for t in linspace(0.,1.,num=num_segments)] for fa,fb in zip(factor_a,factor_b): intermediate=farray(fa*q_start)+farray(fb*q_end) normalized_intemediate=intermediate/np.linalg.norm(intermediate) results.append(normalized_intemediate.tolist()) return array(results,dtype=float64) # Example Usage start_orientation = [-0.5,-0.8,0.2] goal_orientation = [0.9,0.4,-0.1] path_points=spherical_interpolation(array(start_orientation),array(goal_orientation)) print(path_points[:5]) # Print first five points along path. ``` 此代码片段展示了如何使用 Spherical Linear Interpolation (SLERP)[^2] 方法来进行方向上的平稳转换,这对于保持物体朝向的一致性和连贯性非常重要。 #### 多轴协同工作模式下的插补策略 当涉及到多个相互关联的动作单元同步运作时——比如 CNC 加工中心里的 XYZT 四自由度联动操作——就需要考虑更高级别的协调机制了[^3]。这里提到的一个关键技术要点就是所谓的 “主从关系”,即指定某条轨道作为主导者而其他跟随其节奏调整各自步伐大小;如此一来便能确保整体动作流畅自然无突兀感。 另外值得注意的是,在某些特殊场合还需要引入额外的功能模块诸如前视缓冲区管理器等辅助工具以便更好地应对可能出现的各种突发状况比如说急转弯等情况下的速度调节问题等等[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值