找人建网站,西安做网站微信公司哪家好,电子工程有限公司,wordpress博客建设与经营在实现角色移动时#xff0c;我们是通过获取当前角色向前或者向后移动的向量来计算具体的移动步长#xff0c;进而增量设置角色位置以达到使角色移动的目的。但是获取向前或者向后的向量得先知道当前角色在世界坐标系中旋转的角度#xff0c;于是我们就在ControlRotation和A…在实现角色移动时我们是通过获取当前角色向前或者向后移动的向量来计算具体的移动步长进而增量设置角色位置以达到使角色移动的目的。但是获取向前或者向后的向量得先知道当前角色在世界坐标系中旋转的角度于是我们就在ControlRotation和ActorRotation之间犹豫不定对二者异同不甚了解分别表达的意图也懵懵懂懂似乎对于初学者总隔着一层面纱今天我就帮大家揭开它。
有个大前提只讨论第一人称
首先概念上讲ControlRotation作为控制器的成员变量在这里是表示人眼睛朝向ActorRotation表示人身躯的朝向。
如下示意图会更明确rotation示意图我们可以从常识上理解人的眼睛在脑袋上脑袋是可以左右摆头Yaw角度变化可以上下点头Pitch角度变化而人的身躯只能左右转动Yaw角度变化身躯不能僵直地俯仰这在第一人称射击游戏里面不会出现。反正我没有见过你如果见过请告知我
我们可以通过代码进一步佐证获取眼睛位置和朝向朝向获取ControlRotation和ActorRotation的关系
它们两者的关系其实主要是理清楚它们分别是怎样更新的或者其中一个值的更新怎样影响到另一个值的变化。
1、ControlRotation的更新
我们在开发第一人称射击游戏时通过鼠标的上下左右移动以控制枪的瞄准方向也就是眼睛的朝向会利用到如下代理绑定ControlRotation的更新代理随着鼠标移动会使眼睛也保持移动那么具体ControlRotation怎样被更新的呢那么我们通过UE4底层代码进一步探究如下图ControlRotation更新算法我们先看到我标注的关注1在此ViewRotation就是ControlRotation它会在PlayerCameraManager的ProcessViewRotation函数里面被更新更新的变换值是DeltaRot这个值是角度的增量变化值。更新好了后通过SetControlRotation更新ControlRotation值那么再看ProcessViewRotation函数具体的实现如下图ControlRotation增量角度更新如上图的注释说明最终值是通过引用做返回而值的增量更新就是加上了DeltaRot。不过我们前面就说了ControlRotation实际上就是眼睛的朝向眼睛朝向按实际情况角度是有限制的比如向上仰头肯定不能超过90度否则头就断了很恐怖的情景。具体限制的值如下图眼睛各角度限制值由此我们终于弄明白了ControlRotation具体更新的过程实际上就是把增量变化的角度值增加到其上即可增量变化的角度值与鼠标的位置变化成线性关系。
2、ActorRotation的更新
那ActorRotation是怎样被更新的我们回过头来看《ControlRotation更新算法》图中的关注2当更新完了ControlRotation后会利用它作为参数传递到了FaceRotation函数中那就看一下FaceRotation函数做了什么如下图ActorRotation更新我们看到它其实会根据bUseControllerRotaionPictchbUseControllerRotaionYaw和bUseControllerRotaionRoll开关分别判断是否使用ControlRotation的分量角度最后会通过SetActorRotation函数设置ActorRotation的值这里也恰好解释了我们经常在编辑器里面设置的几个开关如下图开关设置对于射击游戏我们设置让ControlRotation的Yaw值去更新ActorRotation的Yaw值也就是说眼睛的左右转向控制角色身躯的左右转向。
至此所有谜底我们都已经解开我们给出一个结论
在第一人称射击游戏中ControlRotation表示的是角色眼睛的朝向为了符合现实中的效果分别对眼睛在Pitch、Yaw、Roll三个转向上做了限制ActorRotation表示的是角色身躯的朝向根据用户配置它的Yaw是更新自ControlRotatioin的Yaw值。
不知道大家有没有一种包公破案的感觉当然这里要简单很多实际在工作中我们碰到的问题也比这要复杂但是其实解决问题的思路方法一致。
好大家如果有兴趣结合案例去综合实践可以跟着UE4-VR高级课程 虚幻引擎多人在线射击游戏C开发实战(第一季)第六节课《人物前后移动》来做。
欢迎大家加入我们的qq群跟业内人士共同探讨交流。
http://qm.qq.com/cgi-bin/qm/qr?knBfAvQJM7Q8hCESjMF39WTlxMzDLVsd0 (二维码自动识别)