新建控件蓝图,将事先准备好的光点图表添加到图像控件内
要将锚点和光点设在画布中间防止安在AI上时跑偏
在AI蓝图中添加控件组件
打开项目设置,在输入中添加操作映射,设置tab为锁定键
锁定部分如下
执行锁定命令时要先获取所有目标
新建函数获取所有目标
添加变量如下
每次执行前先清空数组,防止出错
获取AI蓝图的所有Actor将数组输入到循环中
并不是所有actor都需要被锁定,所以新建函数设置AI检测距离和视线检测,同时改为纯函数
检测AI距离如下
视线检测如下
检测对象类型是寻找AI碰撞箱,直接寻找模型会被AI碰撞箱阻挡,
并且被AI碰撞箱阻挡不易与场景阻挡区分
所有当没被阻挡是返回false,not翻转后为turn,是能看见
当两个检测都为turn时执行后续节点
在筛选完AI后开始计算剩余AI与玩家的旋转值
旋转值差的绝对值越小越靠近屏幕中间
将得出的数添加到变量里
目标变量内存放各目标的旋转值差,
目标旋转值变量存放各目标的旋转值差的绝对值
因为都在同一数组循环内,所以目标旋转值变量的绝对值与目标变量的目标一一对应
若目标变量内的值大于0则有目标被锁定
获取所有目标函数创建完毕
用keys获取目标变量内的数组,获取目标旋转值内最小的数的序列号
根据序列号获取目标变量数组内的最小值
利用对象的球体检测判断与屏幕最中间的AI之间是否还有其他AI阻挡,忽略自身
返回命中对象,类型转换为AI,若成功则被阻挡,失败则未被阻挡
锁定与取消锁定如下
将目标提升为变量,执行AI蓝图中的事件
AI蓝图事件如下
此分支设置锁定与取消锁定后摄像机旋转
设置时间轴如下,不用tick节省资源
每0.2秒判断是否锁定
判定为turn则门打开执行设置摄像机旋转,判定为false则关闭门执行重置摄像机
设置摄像机旋转
锁定时只需要旋转摄像机的z轴,其余不变
使用插值流畅改变摄像机旋转
设置摄像机旋转后执行设置人物旋转,如下图
重置摄像机,将y轴归零,用插值过渡