p28-p29按键+鼠标点击实现开关门
- p28,创建门的蓝图类
- 创建一个Actor
- 注意(当门的中心点不在边角上时)
- 蓝图
- 三个旋转区别
- 按E键开关门
- 使鼠标点击也可以开门
- 可能遇到的bug问题
p28,创建门的蓝图类
actor和组件的区别、门的轴心点修改
创建一个Actor
添加一个静态网格体组件
创建一个门框
同理创建一个门Door
注意(当门的中心点不在边角上时)
创建一个Scene组件
把物体变换位置
这时只需要旋转Scene就可以旋转物体了
这种方法比较麻烦(注意要在3D建模软件里设置好坐标点)
继续之前的内容
组件搜索Box Collision(盒体碰撞),(注意,盒体碰撞要和Door在同一级,如果盒体碰撞在Door的下一级,开门时盒体碰撞会随门的旋转移动)
调整盒体碰撞大小
蓝图
在组件选中Box可以在细节中找到下图
创建组件开始重叠,组件结束重叠和时间轴
从组件拖拽一个Door到时间图表,拖拽出引脚搜索SetRelativeRotation(设置相对旋转)
三个旋转区别
SetActorRotation(设置Actor旋转)
SetRelativeRotation(设置相对旋转)
SetWorldRotation(设置场景旋转)
SetActorRotation的目标是Actor,整个蓝图类旋转,目标是自己
SetRelativeRotation和SetWorldRotation旋转的是蓝图类里的单个组件
SetRelativeRotation相对旋转是无论怎么转,自己都是(0,0,0)
SetWorldRotation世界坐标永远不会被改变,不会受物体改变而改变
继续绘制蓝图
蓝图如下图连接
把门拖拽到场景即可
按E键开关门
需要对开关门事件进行控制
在事件图表搜索Gate(门)(可以理解为必须有钥匙才可以打开门)
如图连接使玩家成为打开门的一个必须要素
创建蓝图E,连接Gate蓝图的Enter(进入)节点,但是这时进入游戏没有反应,需要新节点
创建蓝图节点Enable Imput(启用输入),Disable Input(禁用输入)和Get Player Controller(获取玩家控制器)
Get Player Controller(获取玩家控制器):告诉控制器是否开启了玩家键盘的输入
如下图连接
创建新结点Flip Flop(使玩家按下E键后第一次走A,第二次走B,第三次再走A,循环往复),如下图连接蓝图
使鼠标点击也可以开门
在组件选中Door,在细节面板找到On Clicked(点击时)(当鼠标点击之后触发事件)
用蓝图On Clicked替换掉蓝图E,在世界场景设置找到Game Mode(游戏模式),Game Mode Override(游戏模式重载)选择ThirdPersonGameMode(第三人称游戏模式)
下图配置了玩家的控制器,点击玩家控制器类的加号,创建新蓝图
勾选细节面板中的Mouse Interface(鼠标接口)中的Enable Touch Events(启用触控事件)、Enable Click Events(启用点击事件)、Show Mouse Cursor(显示鼠标光标)
打开Door_BP事件图表搜索Set Show Mouse Cursor(设置显示鼠标光标)(搜索不到可以关闭情景关联再搜索),把NewPlayerController中的显示鼠标光标关掉
如图连接蓝图
此连接使靠近门出现鼠标,远离门鼠标光标消失
可能遇到的bug问题
第一次进入盒体碰撞没有开门,退出第二次进入才开门
问题分析:在组件中盒体碰撞在门的上一级,开关门时门会移动,会和盒体互相干扰(小bug),门和盒体被视为单独存在,两个蓝图事件会同时执行
解决办法1:让门和盒体在同一级
解决办法2:如下图连接蓝图