当前位置: 首页 > news >正文

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系

1 学前必读

2 Character类相关基础

        -人物移动控制

        -动画蓝图

3 常见游戏机制基础

        -碰撞器、触发器

        -物体使用接口

        -视角切换

4其他相关设计

        -背包系统

        -锻造系统

        -物体破碎效果

        -简易种植系统

        -互动物体动画

5课程结语

二、UI部分

思维导图部分

实操部分

首先创建一个第三人称游戏功能,在小白人的charater中创建变量

1、食物系统

(1)饥饿系统

创建变量(右侧为中文版本)

节点解释:事件tick

Tick事件是程序运行中每一帧刷新一次,例如在通常每秒60帧的游戏运行中,Tick事件就每秒执行了60次。在程序(游戏)开发中,可以借用Tick事件每秒的执行次数来控制Actor在场景中在运动速度等。节点详细解释参考:虚幻引擎UE4中的Tick事件_ue tick-CSDN博客

delta second含义是运行每帧所需要的时间

参考资料1:DeltaSeconds含义

参考资料2:DeltaSeconds用法

帧率为什么会变化?

因为游戏的帧率,特别是射击游戏的帧率是由显卡实时渲染的,而不是像视频一样以一个稳定的速率播放的,所以一秒里的帧速率是不一样的,可能在每秒60帧里,有些帧是完美的60分之一秒的持续时间,有些帧就长达25分之一秒,有些只有100分之一秒,十分不稳定,这可能与射击游戏的渲染特性有关。

在游戏运行过程中,饥饿值就会随着时间慢慢减少

总饥饿值为100,饥饿速度为1(为了测试饥饿速度可以为50,那么每2秒就会掉光饥饿值),那么每100秒掉光饥饿值

但是随着时间的减少,饥饿值有可能变成负数,那么就需要添加一个clamp节点,加入限制函数(Clamp)将其最大最小范围进行限定,将范围限制到0~100(最大饥饿值)之间

进行判断,饥饿值是否是0,是的话输出饿死了

运行画面;

生命值减少
每一秒生命值减少1,进行限定最大值为100,最小值为0,赋值给当前生命值

记得在饥饿值后调用生命值减少节点,将delta second提升为变量(为每帧所需要的时间)

(2)饥渴系统

同理可得,在运行饥饿值的变化的同时饥渴度也在变化

变量实时查看

将玩家变量后的小眼睛开启,在人物细节面板就可以快捷查看到数据的变化

(3)添加UI

导入图片素材

创建控件

将内容和函数连接起来

回到Thirdperson charater的地方将ui显示出来

2.摄像机制作

不仅需要第三人称,按下v按键切换到第一人称视角

回到Character中,添加第一人称摄像头,将弹簧臂的长度改为0,将摄像机的角度修改,(将摄像机的自动启用关闭,所以一开始启用的是第三人称视角的摄像头)

来写摄像机的蓝图,按下按键事件,就修改摄像机的视角

会发现第三人称的人物视角会跟着视角转动,但我们需要转动视角的时候看到人物的正面

(错误)

所以要取消第三人称使用控制器旋转yaw

Pitch Yaw Roll 概念解释:

pitch是围绕X轴旋转,也叫做俯仰角

yaw是围绕Y轴旋转,也叫偏航角

roll是围绕Z轴旋转,也叫翻滚角

资料参考:pitch yaw roll 最直观的解释

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C语言求10进制转2进制(除2取余法)
  • Linux x86_64平台指令替换函数 text_poke_smp/bp
  • python的魔法方法
  • 虚拟现实3d场景漫游体验实现了“所见即所得”
  • TCP粘包
  • 如何搭建一个新生录取查询系统
  • pytorch通过 tensorboardX 调用 Tensorboard 进行可视化
  • Pyspider WebUI 未授权访问致远程代码执行漏洞复现
  • 深入剖析预处理
  • 【LabVIEW学习篇 - 5】:数据类型——数值、字符串
  • RockYou2024 发布史上最大密码凭证
  • cs也能上线liunx马??你会吗???解决木马生成的操作。
  • 化工厂人员定位系统有怎样优势?
  • Zynq系列FPGA实现SDI视频编解码+UDP以太网传输,基于GTX高速接口,提供3套工程源码和技术支持
  • java花店管理系统eclipse开发mysql数据库
  • 自己简单写的 事件订阅机制
  • Angularjs之国际化
  • Apache Spark Streaming 使用实例
  • HTTP中GET与POST的区别 99%的错误认识
  • js 实现textarea输入字数提示
  • js递归,无限分级树形折叠菜单
  • linux学习笔记
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP 小技巧
  • 第十八天-企业应用架构模式-基本模式
  • 反思总结然后整装待发
  • 浮现式设计
  • 京东美团研发面经
  • 前端技术周刊 2019-02-11 Serverless
  • 如何编写一个可升级的智能合约
  • 如何合理的规划jvm性能调优
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 用quicker-worker.js轻松跑一个大数据遍历
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Git) gitignore基础使用
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (苍穹外卖)day03菜品管理
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十八)SpringBoot之发送QQ邮件
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • ./和../以及/和~之间的区别
  • .Net Core 中间件与过滤器
  • .NET MVC第三章、三种传值方式
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET命名规范和开发约定
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国