TTF2里,我相信大伙都不会忘记时空穿梭的关卡,玩家可以通过手套在相同的地图中穿梭不同的时间,现在过不去的地方,“唰”的一下就能从过去通过,并且在过去与现在的来回穿梭之间不需要读条,那么这是怎么做到的呢?我们先从游戏里看一看。
这里我就以B站up主“小怂猫人”的视频里得知,实际上游戏的这个关卡里,存在两个相同的场景,两个场景的高低差不同,玩家在使用技能的时候,改变角色的坐标就可以实现无缝切换了。
图解,“过去”与“现在”其实就是高度不同的两个场景
这么设置的原因,就是为了让玩家在使用技能后能够无缝切换,达到流畅的体验,并且制作起来也非常简单。既然简单,那么我就在虚幻引擎5中试着还原一下这个酷炫的技能。
UE5默认的第三人称模式
首先我们简单的打开一个新的UE5项目,那么这个默认的场景我们就直接保留了。
接下来,我们应该在这个场景的上方,创建另一个场景用于我们的“时空回溯”。
在头上创建一个新的场景
下方场景,地板的高度是-50
上方场景,地板的高度是10000
因为我们是要做成时光回溯的效果,那么我们上下两个场景的地堡,应该除了高度不一样,其他地方都一样,否则我们的人物在穿越的来回会感觉到位置的偏移,这个很好理解吧!
那么,简单的设定好两个场景之后,我们就需要干嘛?
设置我们的技能嘛!
右上角编辑-项目设置-输入-操作映射 ,名字记得改一下,我这随便添了个Skll,后面改成timetravel
接着,我们需要进入项目设置菜单,找到输入,添加一个新的技能输入,这里我把这个技能名字叫"timetravel",并且设定了,按“F"键触发。
设定好了技能之后呢,接下来,我们就要进入蓝图页面,把这个技能教会我们的角色。
双击这个打开它
打开我们人物的蓝图,这里原本是保存了UE第三人称模板自带的人物、摄像机、移动、跳跃等。
模板人物默认的蓝图
OK,打开我们的蓝图了,接下来,该是我们大展拳脚的时候了!
那么,怎么完成这个技能呢,我们需要先构思一下。
首先,这个技能是我按下F键释放的是吧!
因此,我们先找到我们设定好的技能案件,timetravel。
右键任意空白处,输入我们设定好的名字
接着,我们再想一想,是不是应该将我们的人物,移动到高度10000的位置?
直接用中文打字:瞬移,就能找到这个蓝图
这里UE是很方便啊,直接给了我们瞬移蓝图。
但是,这里就需要再次思考了。
要完成这个瞬移,我们需要一个目标吧,谁去瞬移——角色,那我们看这个目标节点,写的是"self"那就是自己,OK,不需要改。
接着,我们是不是要设定瞬移到哪里?
这里黄色节点后边就是位置的坐标,OK,那我们是不是要把垂直的Z轴的数字,改成10000?
这样做对吗?
那么,OK,操作到这一步,请问这么做对吗?不要滑下去,先自己想一想。
不对,为什么不对?
因为下层地板的高度是-50,上层地板的高度是10000,那么两个场景的高度差是多少?10050,想到这点了吗?
并且,这里设定的瞬移坐标,实际意义是(0.0.10000)这个点,意味着你的角色如果走到了(50.23.-50)这个位置,你使用了技能,会瞬移到(0.0.10000)这个点,而不是(50.23.10000),这显然与我们想要的结果不同,这一点想到了吗?
对吧,明显不对,并且,我们希望技能是能在两个时空来回穿梭的,《泰坦陨落2》里也是如此,使用技能能够反复在过去与现在跳跃,所以,我们应该怎么做?
我说说我的想法吧,我们是不是可以增加一个判定条件,假如我们的角色,高度超过了10050,那么是不是使用技能,就让我们的角色高度下降?
那假如我们的角色,高度低于10050,那么是不是使用技能,就让我们的角色高度上升?
所以,这里需要添加一个判定条件,我们使用一个布尔值保存判断的结果。
新建一个布尔变量
我们新建一个布尔值,用来保存我们高度的判断,这里点击加号就能创建。
我们将这一变量,拖到蓝图里,选择”设置InHigh”。
接着,我们需要获取到角色的位置,计算机是个笨比,你看得到你角色的位置,计算机是不知道的,所以我们需要先获取一下。
接着,我们是不是只用知道Z的值是多少就行了?X和Y关我屁事。
所以我们使用拆分,把(X,Y,Z)拆分出单独的Z的数字。
接着做对比,右键点击空白处,输入一个简单的>或者中文“大于”都行,做一个判断,数字大于10050,就输出为真,如果小于10050,就输出为假。
蓝图如图所示
这一步也很好理解吧,并且UE的蓝图非常方便,相同的颜色相连就行了。
当我们做完这一步,接下来也很好理解了。
如果是“真”,那么意味着,人物的高度大于10050,OK,说明人物在上面的场景里,那我们使用技能的目的是不是给它降下去?
并且,我们不能简单的去改变数字,我们是不是要先获取角色的位置,我得知道人在哪里吧?
接着,我X和Y的数字不变,Z的数字减去10050,这个是不是才是我们想要的XYZ的值?
如果是“False”,那么是不是人物在下面的场景,那么蓝图这一块我们复制黏贴,把减去10050,改成加10050,就OK啦?
瞬移操作部分
OK,那么做到这一步,我们的这个技能就大功告成了。
不重要的部分
当然,为了测试我们的技能,在后面我又补充了一个打印文本的操作。
如果传送成功,那么就会在屏幕中出现文字,如果传送不成功,传送的那个位置有别的东西挡住了,就会在屏幕中出现文字“卡住了,回不去”。
这个“仅限开发”的意思是,只在UE编辑器里你会看到它,但是在游戏中你看不到,这个主要是用来方便设计师找问题的。
完整的技能蓝图
最后,我们进入到游戏里实际测试一下。
传送成功
OK,来回传送非常成功!
但是有一个忘了,我们忘记设置瞬移后的旋转值了,因此每一次瞬移后,人物的面向都会回归默认,我们想要更丝滑顺畅的体验!
补充一下旋转
这里我们获取到人物实时的旋转,然后给到瞬移就行了,不需要改变,这样我们的角色每次使用技能都不会改变面向!
OK,到这里,技能的实现就已经制作完成了。
但是呢,想要让技能真正用在游戏里,让玩家们接受,还需要仔细的打磨。
例如,是不是该添加一个使用技能的动画?
然后,还需要添加不同的后期处理等等,让玩家感受到这是同一个地方,但是不同一个时空。
总结一下,其实想要实现《泰坦陨落2》里的时空穿梭不难,做出两个场景也不难,其实难的还是在怎么去想到这个,让玩家会觉得真的像是那么回事儿。
就同样的这个瞬移,它可以是时空回溯,它也可以是《寂静岭》的镜子世界,也可以是玩家走着走着来的一段回忆...
总之原理上大概都是可以这么实现的,但是更重要的是你要想的到这么一个环节,然后去实现它。
我在学习游戏开发的过程中,越来越感觉到,就是想要做的好玩是很难的,很容易就是做出一坨,画面精美但缺乏游戏性和关卡设计的垃圾,所以说越发觉得任天堂牛逼,他们在制作游戏的时候始终是会想到如何做的好玩,做出有意思的关卡设计。
自己在学习UE,发帖记录一下自己的心得笔记,不定期随缘更新!也希望帮助到一些想要学习的盒友!