Player Pawn
现在我们进行的项目是第一人称的。本篇文章我们继续实现以下功能:在玩家视角位置生成物体,并向视线方向“发射”物体。
在游戏运行前的大纲视图里,我们会看到有一个“Player Start” Actor。在视口窗体中显示胶囊形状。看名字是指示 Player 生成的初始位置。
具体的 Player 是动态生成的。我们运行游戏,如图 1 所示,按 F8 键,从玩家视角分离出来。可以看到场景中自动生成了 DefaultPawn 等 Actor。
F8 键:有点西游记里“灵魂出窍”的那个感觉。
如图 2 所示,我们可以使用 Get Player Pawn 节点获取玩家 Pawn 对象。输入的 Player Index 指示玩家索引号,我们这边就使用默认的 0。
我们运行游戏,左右移动视角。在详情视图里,可以看到 DefaultPawn0 的位置信息也随之改变。所以我们这边使用 Get Actor Location 节点,获取玩家此时的位置信息,并将其设置为生成“炮弹”的位置。
运行游戏时,旋转视角。我们发现 DefaultPawn0 的旋转信息没有随之改变。但我们看到有一个 PlayerController0 Actor,它的旋转信息是随之改变的。所以我们使用 Get Control Rotation 节点,获取控制器的旋转信息,并将其设置为生成“炮弹”的旋转。
此时可以看成,生成的炮弹已经“继承”了相机的变换信息了。
现在我们已经完成在玩家视角位置生成物体,接着需要完成向视线方向“发射”物体。
因为生成的炮弹“继承”了相机的变换信息,所以如图 3 所示,我们直接对生成物体使用 Get Actor Forward Vector 节点,就能得到视线方向。
这边的 Forward 向量,从理论上猜测,就是视图变化里 lookat 到 eye 的向量。
就是视线方向。
就是 Actor 局部坐标系变换,在世界坐标系中表示的那组正交基。
得到的 Forward 向量是单位向量,直接作用于冲量太小了,我们继续作用乘法节点。
至此,功能已经全部实现。效果如以下视频所示,我们依次瞄准,然后打飞了所有启用物理模拟的物体。