【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能

news/2024/11/28 23:37:07/

这是我拆解游戏项目的CameraSystem做出的一点点小总结,然后写了一个非常非常简单的锁定敌人的功能在这里插入图片描述

第一步:设置敌人属性,标志为可被锁定

在这里插入图片描述
创建一个敌人蓝图,随便搞个模型进去
在这里插入图片描述
在这里插入图片描述创建一个接口蓝图,设置两个功能函数,一个是被选中,一个是取消选中,用于后期加上敌人被选中时添加一个标记UI。
在这里插入图片描述
给敌人蓝图添加刚刚制作的接口

接下来制作一个简单的UI,表明这个敌人被选中了,UI图片可自己随便弄一个,不用图片写几个字也可以。
在这里插入图片描述
在这里插入图片描述、接下来给角色添加这个UI,运动下位置,然后设置UI,记住要把Space设置成Screen,UI大小可以按照自己喜好设置。
然后初始化UI为不可见的
在这里插入图片描述
然后再在完成接口函数,当被选中就显示,取消选中就隐藏
在这里插入图片描述
然后把敌人拖入场景中,这样锁定敌人功能的敌人部分就完成了。
在这里插入图片描述

第二部:玩家角色设置

先在项目设置输入中添加一个选中敌人的操作
在这里插入图片描述
我这里设置的锁定敌人的键盘操作是tab键,大家可按照自己的需求来设定。

接下来给玩家角色添加基本的变量:一个是bool变量(HasTarget)表示有没有敌人被锁定,另一个是被锁定的敌人的引用(Target)。
在这里插入图片描述
然后再创建一个函数,用来寻找我们要锁定的敌人:
这里我只是简单的获取场景中的一个敌人,如果大家的项目中有许多敌人,那么这个函数要大改,如果面对多个敌人(两三个或以上)、或者玩家与敌人之间隔着一道墙之类的障碍物,那么可能要用到检测;当面临多个敌人,到底要锁定哪一个敌人的问题,可能要把能看到的所有敌人保存到一个数组中并判断哪一个是玩家想要锁定的敌人,这个大家可以自行摸索。
在这里插入图片描述
接下来再给我们的角色添加三个bool变量用来保存我们的角色旋转方式
因为当我们锁定敌人和不锁定敌人的时候,玩家的移动方式不一样:锁定敌人的时候,角色是始终面向敌人的,不锁定敌人的时候角色是面向玩家操作的移动方向的,所以我们要用三个bool变量保存角色的rotation方式,来保证锁定敌人时和不锁定敌人时能够顺利的切换角色的移动方式。
在这里插入图片描述
接下来创建SaveRotaionMode的函数,来保存我们锁定敌人前的移动方式,给上面创建的三个变量赋值
在这里插入图片描述
然后再创建一个RestoreRotaionMode的函数,当我们来加载我们之前保存的移动方式。
在这里插入图片描述
接下来创建一个锁定敌人的函数EnableTarget,当我们按下锁定敌人的操作时,我们先回去找敌人(FindTarget函数),当我们找到后,我们在用之前添加的Actor引用(Target)来保存我们的敌人,然后再把HasTarget状态设置成True,表示我们有一个敌人目标,然后用FindTarget返回的BP_Enemy对象引用来调用这个对象的接口函数Selected来显示敌人身上的UI,然后再保存角色当前的移动方式,保存之后在设置成不根据移动来旋转,而是根据我们的Controller的旋转来旋转,最后再忽略我们控制器的LookInput输入。
在这里插入图片描述
然后再创建一个DisableTarget的函数,来表示我们取消选中目标,调用Target的Deselect接口功能函数把UI隐藏,再把Target设置为空,设置HasTarget为false表示没有目标,然后加载之前我们没有锁定目标之前的旋转模式,最后打开我们的LookInput输入。
在这里插入图片描述
~~最后就是锁定敌人系统的核心,控制器围绕着目标旋转~
创建一个UpdateRotation函数,获取角色的ControlRotation和目标Target到自己的FindLookAtRotation,然后在控制器的Rotation和FindLookAtRotaion之间设置插值让视角转换的更加平滑,最后来设置控制启的Rotation,这样角色就会在之前转换移动旋转方式模式为跟随控制器之后,随着控制器的旋转而旋转。
在这里插入图片描述
最后一步:
看图说话
在这里插入图片描述
最后给相机添加一点效果:
加上Lag让角色在移动的时候会有一定的滞后效果
在这里插入图片描述

真正项目中的相机系统其实很复杂,这里只是实现了锁定,仅供参考。


http://www.ppmy.cn/news/615744.html

相关文章

Redis并发问题(雪崩、击穿、穿透)

前言 Redis作为目前最火的NoSQL数据库,在大量互联网企业作为重要的核心技术,Redis作为数据库的缓存,在高并发情况下也会出现各种问题,下面我们来了解这些问题以及解决方案,这些也是程序员面试时的高频问题。 Redis的…

冰封王座1.17版新英雄研究之地精炼金术士

原文链接如下:http://game.dayoo.com/content.php?id24073《冰封王座》1.17新英雄之地精炼金术士 在冰封世界进入到1.17时代得时候,地精家族继地精修补匠之后又诞生了一位伟大的英雄,那就是地精炼金术士。让我们看看这位闪亮登场的新英雄都有…

冰与火之歌

冰与火之歌 当代被冠以史诗名号的东西本来就不多,遑论一部奇幻小说。 最近在朋友力荐下看了《冰与火之歌》,一开始不解这种题材的作品能出彩到哪里去,读完之后,唯有赞叹。相比之下,《魔兽世界》剧情小说显得那么粗糙无…

Redis学习04——主从复制、哨兵模式、缓存击穿、穿透、雪崩

文章目录 1. 主从复制1.1 概述1.2 作用 2. 哨兵模式3. 缓存穿透3.1 描述3.2 解决方案 4. 缓存击穿4.1 描述4.2 解决方案 5. 缓存雪崩5.1 描述5.2 解决方案 1. 主从复制 1.1 概述 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前…

Tendis(Redis)冷热混合存储怎么解决缓存击穿、雪崩、一致性3大难题

导语 缓存由于高并发和高性能的特性,经常被用于提高数据库的性能。但是业务往往需要花费大量精力来维护缓存和数据库的一致性。由IEG技术运营部/存储与计算资源中心 & 腾讯云数据库团队联合打造的 TendisX 冷热混合存储, 使用 Redis 作为缓存&#x…

“魂系”游戏的魅力,不止在于受苦——浅谈黑暗之魂的设计特色

引言如果要选出“游戏中最令人印象深刻的词”的话,“YOU DIED”绝对会在许多玩家心目中占据一席之地。“YOU DIED”是黑暗之魂系列里,玩家角色每次死亡时,屏幕上会出现的告示。每个玩过魂系列的人,一定见到过这个告示许多次。黑暗…

Nginx的Location和Rewrite

目录 Rewrite简介 1.0 Rewrite实际场景 1.1 Rewrite跳转场景 1.2 Rewrite跳转实现 1.3 Nginx正则表达式 1.4 Rewrite命令&&语法格式 1.5 flag标记说明 2 Location分类 2.1 Location优先级 3 Rewrite&&Location比较 4 场景跳转实验 4.1 基于域名的跳转 …

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项? 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…