效果
通过控制键盘WS键使得“CameraPawn”进行前后移动
步骤
将landscape的Z轴位置更改为0
删除“PostProcessVolume”
将“LightmassImportanceVolume”移入Lighting文件夹内
新建一个蓝图类,父类是Pawn,命名为“CameraPawn”
将“MyController”重命名为“CameraPawnController”
双击打开“MyGameMode”
默认Pawn类改为“CameraPawn”
打开“CameraPawn”,添加一个场景组件
将场景组件作为根组件
添加一个静态网格体组件
重命名为“Sphere”
再添加一个弹簧臂组件个摄像机组件,层级关系如下:
选中“Sphere”,静态网格体设置为“MaterialSphere”
再更改其大小
Z轴位置设置为100,Y轴旋转设为-70
此时摄像机就是一个斜向下的视角
打开“CameraPawnController”
新建一个变量,命名为“CameraPawnRef”
变量类型为“CameraPawn”的对象引用
新建一个宏,命名为“ReferenceCast”
在“ReferenceCast”中创建如下节点
在事件图表中添加如下节点:
为了能够控制“CameraPawn”在世界中移动,我们继续在“CameraPawn”中进行如下操作:
首先创建一个布尔型变量“DisableCamNav”,表示是否禁用“CameraPawn”的移动,如果为Ture表示禁止移动。
创建如下节点:
创建一个函数,命名为“MoveSpeedCalculation”,用于计算“CameraPawn”的移动速度(我们希望相机升高时加快移动速度,相机降低时减缓移动速度)
添加一个输出节点,命名为“MobileSensitivity”,浮点类型,意思是移动灵敏度
访问说明符设置为受保护,勾选纯函数
获取到弹簧臂的长度,将这个数值÷100作为镜头的灵敏度,并且限制灵敏度的范围在5~20之间。
在事件图表中继续新建一个浮点型变量,命名为“FastMoveMultiplier”,可以理解为当“CameraPawn”进行快速移动时的倍数
默认值设为1,也就是正常的移动倍数,如果后面我想增加移动速度,只需将这个值调大即可。
在事件图表中创建如下节点,将移动灵敏度与移动倍数相乘在乘输入轴映射的倍数来得到“CameraPawn”最终在X轴上的每帧的移动距离
YZ轴上的值不变,只改变X,将新的向量组合起来:
输出该向量的值
输出的值命名为“Transform”
将节点折叠到宏
重命名宏为“MovementX”
双击打开“MovementX”,修改输入节点的命名分别为“AxisValue”,“MoveSensitivity”,“SpeedMultiplier”和“CameraRef”
回到事件图表中,将新变换设置给“CameraPawn”
在项目设置中将玩家状态类改为“GameStateBase”
此时运行游戏,我们就可以控制“CameraPawn”进行前后移动了,效果如文章开头所示。