【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能
这是我拆解游戏项目的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让角色在移动的时候会有一定的滞后效果
真正项目中的相机系统其实很复杂,这里只是实现了锁定,仅供参考。
【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能相关推荐
- 初识Android 制作一个简单的记账本
初识Android 制作一个简单的记账本 主要功能 实现一个记账本页面 可以添加数据并更新到页面中 主要步骤 运行截图 主页面 点击红色按钮弹出添加页面 完成后自动更新到目录下 主要功能 实现一个记账 ...
- 制作一个简单的switch小游戏
好的,那么,我们可以这样来制作一个简单的 switch 小游戏: 首先,我们需要先引入所需的库,如 stdio.h 和 stdlib.h. 接着,我们可以使用 printf 和 scanf 函数来输出 ...
- (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...
- 32位mips运算器logisim_大神教你制作一个简单的16位CPU
如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全..... 如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有 ...
- 如何制作一个简单的16位CPU
http://www.acfun.tv/v/ac362187 我果然标题党了吗?不是转载那本日本人写的书啊!纯手打表诚意,希望猴子给过,第一次投稿各位大神帮帮忙...... 如何制作一个简单的16位C ...
- 制作一个简单的canvas动画
制作一个简单的canvas动画 作者:旺仔 一上来先话不多说上代码,代码能看的懂得,ok,就当我下面所有的内容为废话,代码看的不太懂的,没关系我会一点一点让你懂,不过前提是你有一定的html+css+ ...
- Unity3d制作一个简单粗暴的五子棋项目工程源码
Unity3d制作一个简单粗暴的五子棋 最终效果 项目源码 绘制棋盘 绘制构思 绘制代码 效果图 放置棋子 功能和效果 功能 效果 制作棋子 定义类和类型 棋子类型 棋盘格类 实现功能 初始棋盘格数据 ...
- WF4.0入门系列1——创建一个简单的工作流
WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...
最新文章
- 利用状态图实现词法分析
- 2022年中国酒店业数字化转型趋势报告
- ECCV2018——点云处理相关文章
- 有间距的表格布局 table布局
- netty 常见疑问 faq
- java里的进制转换函数_基于Java中进制的转换函数详解
- 计算机组成微程序操作码怎么写,计算机组成原理学习笔记——控制器
- 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数
- 基金行业数据安全保障体系建设探析
- python命令行参数作用_python中命令行参数和os模块常用函数
- 普通计算机安装服务器系统安装教程,Windows Server操作系统详细安装教程
- ad9原理图转到orcad capture16.5
- SAP根据采购申请,采购入库
- RGB与CMYK色彩模式
- 计算机大赛获奖作品动画,全国xx杯说课大赛计算机类一等奖作品:《遮罩动画》说课课件...
- 年审是当月还是当天_年审年检7月当月审可以吗
- Java 统计文件ip_基于zxinc网站ipv6静态数据文件的JAVA查询实现
- ftp服务器的端口20和21的具体作用,FTP协议中21端口和20端口的详解
- 计算思维应用于计算机学科,【计算机教学论文】计算机教学中的计算思维培养(共2667字)...
- 基于springboot小型车队管理系统毕业设计源码