一、增加模型
1.如果没有门的模型,在世界大纲界面,资源浏览面板,选择新增,选择添加功能或内容包,选择内容包中的StarterContent。点击添加到项目。
2.搜索 Door 选择门的模型双击打开进入模型编辑器,给门设置碰撞盒,为了有碰撞效果,门关着的时候,人不能穿过。点击Collision选择设置盒体简化碰撞,保存后关闭即可。
二、关于开关门操作实现方法很多,这里只操作在蓝图类中通过触发器操作。
1.在文件夹中右键创建Blueprint Class选择Actor类,命名为Door,创建完成后双击打开该蓝图类,将门框SM_DoorFrame及门SM_Door的模型拖拽到蓝图类中,设置门的位置,与门框相符合
2.在SM_DoorFrame下增加合体触发器,选择增加组件中搜索Box 选择Box Collision。设置触发器的位置及大小
注意:触发器父物体是SM_DoorFrame,不能为SM_Door,因为后面要进行对门的开关动画设置,如果在门的下面,门旋转后,触发器也会跟随旋转,触发位置就会更改,所以触发器不能跟随门旋转。
3.选择事件图表进行开关门逻辑蓝图搭建
流程:人物进入触发器范围,鼠标点击门,门打开,或关闭,人离开触发器范围,点击操作无效。
1.在Component面板选中Box 创建 重叠进入及重叠退出节点,
2.开关等操作专用节点Gate节点,此节点是专门来控制物体的开关,进入触发器可以开门,离开触发器,不可用开门所以分别连接open及close
参数:1.Enter 可以连接键盘输入或任何事件
2.Enter 相当于一把钥匙,前提是open要打开的状态才能执行exit后面的蓝图
3.open相当于一个门需要被开启,但是还需要一把钥匙
4.close相当于一个门不能被开启,无论有没有这把钥匙都不能开启。
3.因为要有点击事件,但是该点击事件是通过点击门来响应,所以选中SM_Door物体,细节面板最下方有点击事件的创建方法,选择后就会有对应的点击事件节点,点击事件就是开门的钥匙,与Enter连接
4.判断完成后要有开关门的动画,使用Timeline对SM_Door进行操作创建TimeLine 时间轴节点命名为DoopOpen,双击打开时间抽编辑界面,设置门在Z轴上的旋转角度即可。(第一课开关门中有使用时间轴操作)所以增加一个变量值从0更改到90,不要有空白时间,因为有关门操作,如果开门操作2秒完成,我们变化时间是5秒结束,当动画反向播放的时候,首先会有3秒的空白期,然后再从2秒反向播放到0秒,看上去会有延迟的效果。所以把控好时间设置。
5.完成时间轴后,返回事件图标,因为鼠标点击有开关,所以在这里使用FlipFlop节点进行流程控制,开一次关一次循环操作节点进行连接
6.设置门的旋转
增加门的引用节点,设置旋转节点,使用set Relative Rotation节点,
注意:搜索是会有Relative 和World 两种节点,因为门是有父物体的,如果是Relative相对旋转,是相对于父物体的旋转值,父物体不管怎么移动怎么旋转,子物体的相对于父物体的旋转值是不变的。控制旋转的时候,门与门框匹配。
World 是指世界坐标,如果父物体一旦旋转更改了旋转方向,门在旋转的时候会在世界坐标中旋转,不会随着父物体的旋转而改变旋转效果,与父物体的方向会造成不匹配。
(若还不清楚请查询本地坐标系及世界坐标系的区别)
7.门的旋转时在Z轴方向,所以在set Relative Rotation节点上,选中New Rotation 右键选择分割结构体引脚,将向量分解。
将DoorOpen节点上的ZValue与旋转节点的Z值连接,编译,将我们编辑的蓝图actor放到场景中。
8.此时运行后是没办法显示鼠标的,点击工具栏Setting打开世界设置,可以自己创建一个游戏模式将GameMode Override替换掉,
最主要的是将选中的游戏模式下的Player Controller Class 更换,点击 + 新建控制器的类,新建后重命名,并将该选项值更改为自己创建的类名。
9.双击打开创建的玩家控制器的类,在类默认值的细节面板,将Mouse Interface下的 鼠标显示 及相应点击事件 勾选,如果不勾选鼠标将不显示,鼠标点击事件无响应。
10.设置完成后运行场景就可以进行人物走动,并走到一定区域可以鼠标点击开关门操作。
11.如果导入的模型中心点不在自己想要的理想位置,可以通过创建Scene空物体,然后将空物体摆放在理想位置,将该模型作为空物体的子物体,这样控制空物体就可以得到想要物体的旋转方式。(不用单独操作模型物体)
注意:
1.在关卡蓝图中键盘按键事件节点是可以直接生效的
2.在蓝图Actor中写键盘按键事件节点是不会生效的,要开启输入,使用Enable Input节点,一般开关门的按键操作是不在蓝图actor中写。