Unreal Engine 5 课程笔记 蓝图部分

news/2025/1/8 15:21:58/文章来源:https://www.cnblogs.com/PAdiD/p/18649857

学习课程:Unreal Engine 5 – Full Course for Beginners
非教程,仅学习记录及碎碎念,学完感觉UE就非常的像预制菜,简简单单就能有非常好的效果(非常に新鲜で、非常に美味しい!),但装料太足了要想拆分明白用料和流程又会比较复杂!

Creating Levels

创建基本关卡,几个组件一拖就能有比较好的效果了。skylight在只用这几个组件的时候好像没有什么效果,往后看看。

LandScapes

很容易上手的地形绘制功能,包括很多的基础功能。大概类似Unity Terrain的功能。

BluePrint

讷,其他引擎做的到吗?虽然个人更喜欢用代码来书写逻辑,但这个BluePrint确实在一些情况下比写代码方便(参考手写Shader和Shader Graph)。
LeveL Blueprint有两个起始结点,Event BeginPlay在场景开始运行时(第一帧)执行一次(Unity的monobehaviour类的Start()函数),Event Tick则是每帧执行一次(类比update()函数)。

对于函数,默认是每次需要调用都会获取新值,而不是用第一次调用得到的值。例如下例中,两次输出的位置是不同的。

蓝图中的变量,结构体,枚举,函数

没什么可以介绍的,都是C++相同的东西。

Macros

翻译过来是宏,有一些比较特殊的特性,比如能多输入多输出,能用Delay等等。但目前还不是很清楚具体使用场景。

Delay:比较特殊的函数,主线程不会因为 Delay 停止运行。
Delay 的实际执行过程如下:
1.当前帧运行到 Delay 时,定时器被注册。
2.主线程立即返回,继续处理其他任务(例如下一帧的 Tick)。
3.在 x.xx 秒后,定时器触发并执行 After Delay。
也就是说,在Tick中使用Delay不会影响帧率,但是会产生多个定时器。

Flip Flop

字面意思,两个分支每执行其中一个下次就执行另一个。

Do Once

只执行一次,但触发Reset后,再进入该事件依然可以执行。

classes/Actor

蓝图创建基本类就类似Unity中创建一个C#脚本书写类,创建Actor父类的类,就类似于创建了一个自带Object的C#脚本。

Actor可类比Object,Component倒是都一样叫法;

Actor的Tick可开可关,而且可以很方便的设置Tick的间隔。

在设置Static Mesh的时候发现,UE的Static Mesh是自带很复杂的碰撞体的,而且设置的Actor和LandScape创建的地面发生碰撞是不会触发Event ActorBeginOverlap的,可能默认设置两者的碰撞体不会触发Event ActorBeginOverlap。这块和Unity有很大的不一样,Unity中Mesh,Collision和Rigidbody完全是分开的组件。

Pawn:指代玩家控制的Actor。

Character/角色控制

根据介绍,Character就是可以四处走动的一种Pawn,创建一个Character(或者说创建一个继承自Character类的子类)通常自带4个组件,碰撞,朝向,Mesh和角色移动。

但如果想“操控”该Character,还需要设置一下GameMode,创建一个GameMode,然后将DefaultPawnClass设置为我们创建的Character,这时候启动游戏会使用设置的DefaultPawnClass创建一个Character,对于GameMode中没有声明的部分,都会创建默认的设置(比如相机,起始位置等,例如默认GameMode会创建了一个默认的Pawn给玩家控制)。

GameMode 定义游戏的规则。规则可以包括玩家加入游戏的方式、游戏暂停和关卡过渡以及任何游戏特定的行为,如获胜条件。每个关卡都设置了 GameMode,而且 GameMode 可在多个关卡中重复使用。

使用Add Movement Input控制移动

Add Movement Input只能在每帧运行的事件中生效(如Tick Events,InputAxis等),所以不能直接用Keyboard Events触发Add Movement Input,因为Keyboard Events只在事件发生的瞬间触发一次,而且不是基于帧渲染的频率(可以理解为不是在每一帧内检测是否按下的)。而且,用InputAxis Mapping支持修改键盘映射,Keyboard Events就直接固定了。

鼠标控制视角

同理,但默认视角控制只能控制Yaw。相机如果启用Use Pawn Control Rotation,对角色被冻结的轴相机可以旋转(在自身坐标系下),对角色也能旋转的轴则只旋转角色(角色带动相机旋转,在整个Character坐标系下)。

设置全局灵敏度

玩家在角色中设置的灵敏度在每次重新创建角色时都会变成默认值,所以需要一个全局的灵敏度,这样每次创建角色都能使用设置好的灵敏度,大概这种场景。

教程中通过在PlayerControl中创建一个变量,然后每次创建Character都读取这个变量来设置灵敏度实现。感觉用PlayerControl只是因为PlayerControl在会关卡开始且在Character的BeginPlay Event之前创建,这样能读到一个有效且整个关卡运行时都存在的值,那么放在GameMode中也是可以的,但是从功能上说,PlayerControl更合适。

想要在m_Character中使用m_PlayerControl的方法,需要Get父类PlayerControl再Cast to m_PlayerControl获取到m_PlayerControl,基本上所有自定义的子类都是这么获取的。

设置跳跃

然后想擅自实现一下跳跃,托了一个Jump到蓝图上,于是乎就完成了最基础的跳跃。嗯?我在期待什么,我地面检测呢,我控制逻辑呢。Character Movement说,我全帮你做好了,想跳的更高?想二段跳?都轻松拿下。

实现拾取功能

教程中的拾取功能拾取的是overlap的Actor中下标为0的Actor,简单添加了一下功能,实现在overlap多个Actor时,会拾取距离最近的Actor。

变量的可设置项

Expose On Spawn:暴露给Spawn,可以在蓝图中Spawn Actor时设置该变量。
instance editable:实例可编辑,在编辑器中可以直接编辑该变量。

实现推球功能

这里就不实现了,没有新的内容这块,推球是通过AddImpulse实现的,AddImpulse会给物体某个方向的力。通过开启组件的Actor Hidden In Game可以在游戏中显示该组件(比如碰撞体)。

Impulse vs Force
AddImpulse will apply the force vector without adjusting for frames per second (fps). AddForce adjusts the force vector according to the current fps as it is intended to be called every frame. For example, if your frame rate were 60 fps and you called AddForce once then you would have to multiply the force vector by 60 (or call AddForce 60 times) in order to get the equivalent effect as calling AddImpulse once.

描边

最简单的方法实现,正面剔除沿法线外扩渲染一次,正常渲染一次。没实现固定描边粗细,要实现的话在CS中计算外扩的距离即可。
UE好像没找到怎么直接给mesh增加材质的办法,应用多个材质的方法是增加多个子mesh,用不同的材质(?),或者用Modeling模式,但这个只能对内置的基础mesh修改材质数量。

Blend Mode:
详见:材质混合模式

这种描边对每个面片都是独立顶点的mesh会比较差,对简单的几何体的话,可以直接用个放大一些的mesh简单处理

RayTrace

这块也是介绍了下Line Trace怎么使用的,以及多相机如何选择当前使用的相机,用于Debug的图形的绘制。教程用的是Line Trace by Channel,这里Channel类似于tag,可以在碰撞体中选择如何处理各Channel的射线检测(忽略或者击中)。

创建UI

实现血条及血条控制,主菜单和关卡切换功能。
基本控制流程很容易理解。主要是熟悉各种组件的使用,设置鼠标是否可见,三种Input Mode的效果(Game only:鼠标限制在游戏窗口,且不能控制UI。UI only:只能控制UI,鼠标不会被游戏窗口限制。Game and UI:都可以控制,且鼠标不会被游戏窗口限制)。

创建蓝图函数库 blueprint function library

大概就是个自定义函数库,可以将一些需要使用到的,但与物体无关的功能性函数写在这。

静态网格/Nanite/材质

动画系统

Animation Blueprint可以看成是一个包含状态机及状态机条件控制的蓝图。针对骨骼网格,Animation Blueprint可以自动做到比较丝滑的在不同状态之间切换。
Blend Space:功能是通过参数混合多个动画。比如可以通过速度控制 站立 和 行走状态的混合动画。实现速度越快,人物行走动作越快。但由于键盘做不到轻推w,使用 Blend Space 的效果并不是很显著,所以添加了一个Shift跑步的功能。

站立到行走的状态切换虽然看着和Blend Space差不多,都实现了站立到行走的丝滑过渡,实际是发生在两个阶段的,一个在状态间,一个在状态内。

至此蓝图部分全部实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过修改格式灵活运用百度搜索

1、“+”加号 —— 强制包含关键词 在关键词的前面使用加号,也就等于告诉搜索引擎该单词必须出现在搜索结果中的网页上。 例如:在搜索引擎中输入“+电脑+电话+传真”就表示要查找的内容必须要同时包含“电脑、电话、传真”这三个关键词。 2、“-”非——消除无关性 逻辑“非”…

Arm主板与x86主板的区别

在当今数字化迅猛发展的时代,计算机硬件的架构选择对于系统的性能、能效以及适用性具有至关重要的影响。Arm架构与x86架构是目前主流的两种计算机体系结构,各自在个人计算机、服务器、嵌入式系统及移动设备等领域中占据了重要地位。本文旨在探讨Arm主板与x86主板之间的区别,…

E. Beautiful Array(题解)

原题链接: https://codeforces.com/problemset/problem/1986/E 思路: 排序,取模, 思维 关于操作:ai=ai+k; 若要使a1+m1*k==a2+m2*k; 则当a1, a2满足a1%k==a2%k,a1,a2可以满足a1+m1*k==a2+m2*k;并在需要(|a1-a2|)/k次操作。将a数组取模后,用vector分别储存, a1和a2相差越…

Python语言中进程、线程、协程执行效率分析

python语言中进程、线程、协程执行效率比较。 问题:python语言中 进程、线程、协程执行速度哪个最快? 在Python中,进程、线程和协程的执行速度不能简单地进行比较,因为它们的性能取决于多种因素,包括任务类型、I/O操作、CPU密集型计算、操作系统调度策略以及Python解释器的…

CICD Day4、Jenkins主从架构

Jenkins主从架构(Master-Slave)是一种分布式架构,主节点负责管理项目配置、任务调度和监控,从节点用于执行具体的构建任务。Jenkins主从架构如下图所示当项目触发构建时,主节点将任务分配到某个从节点,从节点根据项目配置执行一系列操作,如拉取代、代码编译、部署到目标…

如何进一步做好信息收集

如何进一步做好信息收集 前言 前面一节介绍了一些信息收集的网站和工具,今天主要介绍一下如何进行半自动化的信息收集,全自动化的信息收集容易出现一些脏数据,而完全手工进行信息收集速率又太低,所以为了提高速率,我们需要充分利用一些脚本和工具 WHOIS半自动化收集 通过W…

链路诊断最佳实践:1 分钟定位错慢根因

面向生产应用“错”、“慢”两大风险,通过链路追踪及其关联数据、跨域实体关系和大模型算法,实现错慢请求智能根因定位,提升系统稳定性和运维效率。线上应用风险主要分为“错”、“慢”两大类。其中“错”的原因通常是程序运行不符合预期,比如 JVM 加载了错误版本的类实例,…

SwanLab最全使用教程:看这篇就够了

SwanLab是一个用于可视化和监控深度学习模型的工具。本文介绍了SwanLab的安装、启动和使用方法,并提供了参考链接。前言 机器学习通常涉及在训练期间可视化和度量模型的性能。 有许多工具可用于此任务。 在本文中,我们将重点介绍 SwanLab 开源工具,它可以服务于各种深度学习…

维修ABB IRB6700机器人的平衡缸3HAC043477出现异响

当ABB IRB6700机器人的平衡缸3HAC043477出现异响时,可能需要进行内部零件的检查和更换。以下是一些建议的步骤:1、检查IRB6700机械臂平衡缸的密封性:确保平衡缸的密封性良好,没有气体泄漏。如果发现有气体泄漏,可能需要更换密封件。2、检查活塞和缸体的磨损情况:如果活塞…

探索编程知识的宝库:www.readview.site 深度揭秘

在当今这个数字化浪潮汹涌澎湃的时代,编程技能已经如同基石一般,支撑着各行各业的创新与变革。无论是开发炫酷的手机应用、构建智能的物联网系统,还是投身于热门的大数据分析领域,扎实的编程功底都是迈向成功的关键一步。而在众多的学习资源中,www.readview.site 脱颖而出…

探索编程知识的宝库:[www.readview.site](http://www.readview.site) 深度揭秘

在当今这个数字化浪潮汹涌澎湃的时代,编程技能已经如同基石一般,支撑着各行各业的创新与变革。无论是开发炫酷的手机应用、构建智能的物联网系统,还是投身于热门的大数据分析领域,扎实的编程功底都是迈向成功的关键一步。而在众多的学习资源中,www.readview.site 脱颖而出…

Mysql连接报错排查解决记录

Mysql连接报错排查解决记录 背景:系统:uos server-1060e​ 运行环境kvm虚拟机​ mysql版本:5.7.44, for Linux (x86_64)问题现象: 宿主机重启后,kvm虚拟机内的mysql服务无法远程连接了。通过不同的客户端工具连接,报错现象分别如下: dbeaver-ce 工具连接报错: Can no…