part1. 切换角色操作
首先,我想实现一个切换角色的功能。那么就需要用到Multigate
结点。
这个结点在执行时是一个分支语句,但是重复执行(按下触发的按键)后会默认(Is Random 和 Loop不勾选的情况)执行下一个引脚,所有的引脚的执行一轮后不再重复执行,也就是所有角色操纵过一轮后不再允许切换。
但是通过Loop
参数可以循环执行,也就是反复重复切换人物的操纵。
假设场景中有三个人物,需要按 1
键来在其中切换操作权。那么就需要获取玩家控制器并使用它的Possess
结点来切换引脚到一个对象,这里就需要三个引脚都调用Possess
来切换到三个不同的对象引用。
这样直接切换角色的操作权会时摄像机也在切换的一瞬间切换,画面会比较生硬。所以我们需要在切换到另一个玩家的操作过程中有一个延时的摄像机运镜过程。
part2. 运镜
运镜需要用到一个叫做使用混合设置视口目标
的结点,Target
是当前的玩家控制器结点(返回值),New View Target
是新的视觉目标,这个目标就是你想运镜后到达的对象目标,这里作为一个函数的输入参数,因为这个运镜对于每一个对象都要执行一次,所以我封装成了函数方便多次使用。下面的混合函数我选择了立方型,会更加自然一些。
有了这个运镜的函数,我们可以在切换到目标角色对象的操作权之前加上这个运镜函数来插入一个运镜的效果,可以注意到我在过渡后加入了一个延迟效果并且延迟的时间和运镜的时间一致,这是为了给运镜一个缓冲的时间,防止在运镜过程中直接切换角色的控制覆盖了运镜的过程,简单来说就是给系统两秒钟时间等待运镜过程。
到这里运镜的方法就已经基本实现了,但是手贱的同学可能会反复按1
,按个不停,这时候就会在多个运镜目标之间鬼畜。
所以可以增加一个布尔值进行判断,判断是否开启了运镜,一旦开启运镜,布尔值为True
,直到运镜全流程结束布尔值变为False
,在布尔值为False
,也就是还没开启的时候允许按下1
切换角色,如果已经开启也就是布尔值为True
就不允许切换。这样玩家就必须等待操作结束才可以进行下一次操作,防止鬼畜现象的发生。