UE5引擎入门,第一周总结:简单的旋转魔方小项目

基础知识总结

蓝图节点

1.蓝图中的节点是封装好的函数。这些函数功能强大,但由于数目繁多且内部实现不明(注:可能是开发环境问题,转到C++代码这一步永远无法执行),总会出现一些不明所以的bug(比如默认的绕X、Y、Z轴旋转方向不一样)。所以最重要的不是函数功能本身,是函数的输入/输出变量的数据结构。
2.常见的入门节点在前文已经介绍过,日后能看源码了会解析一下我认为做的巧妙的节点。
3.一些能提高效率的操作:通过输入/输出参量进口拉出引脚直接创建变量。灵活使用复制功能避免重复操作。数学计算尽量封装成函数(好像是废话)。
4.一些复杂节点输出的数据结构在官网的技术文档也查不到,加上看不到源码,只能推测其内部特性和存储方式。在学习初期,这些困难只能通过灵活使用博客和chatGPT解决。

第二周展望

1.蓝图的学习仍需继续。现在能够做出的东西根本不能称之为作品,充其量只能算是“HelloWorld”。UI、角色、视角调整,这些与人类交互的东西才是游戏区别于其他艺术形式最本质的东西。
2.必须想办法看到各种函数、对象的C++源码。如果我们不了解手中的工具,那么我只能完成一些很基础的工作。
3.必须持续精进C++水平。蓝图中的对象继承错综复杂,接口多种多样。要想高效率的学习,不仅要正确的读懂C++代码,更要快速高效的阅读C++代码。提高代码的阅读速度,就需要熟练度。
4.阅读是为了更好地编写。必须独立编写更多C++代码,哪怕只是把刚刚看到的代码复述性的重写一遍。

入门第一周项目:会旋转的魔方

需求分析

1.魔方本身是一个正方体,其本体又是由N3个小魔方组成的。对于魔方整体而言,六个面分别拥有六种不同的颜色,而这一个方向上的颜色又是又组成魔方的小方块提供的。
2.魔方的旋转共有3N种,可以由29(N-1)种旋转等价代替(注:这里不考虑正反方向,默认向坐标轴正90度旋转)。出于美观,我们应当实现所有旋转。
3.魔方的小方块是固定在魔方上的,因此在魔方的某一层旋转时,小方块必须同步旋转。

设计思路

1.针对需求1,我们需要一个创造魔方的功能。这个功能在给定N的情况下要能做到创建N3个小方块并把它们放在正确的位置上。而小方块虽然会有很多面被挡住无法在外部看见,我们仍可以把每个小方块的六个面都涂上颜色,这样一整个魔方的所需要的小方块就都是同一对象。小方块的创建我们可以在3dmax和材质界面实现。
2.针对需求2,我们必须清楚魔方旋转的本质是什么。在一个由N3个小方块组成的魔方中,旋转的本质就是选定同属一 的小方块,令这些小方块绕给定的 坐标轴 旋转。因此,我们必须用某种方法,选中一次旋转中的所有小方块。
3.针对需求3,我们会注意到,在UE5中,物体绕坐标轴的旋转不会改变物体本身在世界中的相对旋转角,这会导致一种十分生草的结果出现,就像无论身子如何头都很稳定的鸟类,小方块始终保持同一角度移动到目标位置。而且稍加推演我们就会得出一个显然的结论:这样旋转后,魔方上各个面的颜色不会有任何变化。
综上所述,解决需求不可能只靠在第一周介绍的那些基础节点,我们必须引入一些新节点来解决问题。

新节点

1.AddStaticMeshComponent:在Actor对象中,所有的静态模型成员(StaticMeshComponent)都可以通过这个节点来创造。只要循环N3次,就能创造出我们需要的N3个小方块。至于每个小方块的相对位置,建议经过计算后用Transform数据类型接入这个节点。
2.MakeTransform:用这个节点解决上面的Transform数据类型。
3.SetTimerbyEvent:创建一个事件计时器,在计时器归0时触发一个事件,建议搭配CustomEvent使用。勾选looping会自动循环,基本必选。
4.MutiBoxTracebyChannel:本项目的核心节点。给定起点、终点创建一条线段,并沿给定的半径扫描,返回所有的 命中,输出的数据类型是OutHits——HitResult结构的数组形式,可以拆分成HitResult类型。用这个节点创造一个合理的射线,并给定合理的半径,我们就可以“选中”要旋转的小方块。
5.RotateVectorAroundAxis:令给定的向量绕一条轴旋转特定角度,返回旋转后的向量。
6.TimeLine:新建一条时间线,随时间输出一个数值,可以双击调整。输出频率是帧。
有了这些新节点,我们就可以开始着手构建第一个项目。

魔方的实现

1.首先,我们要创造出一个魔方。运用ForLoop循环和AddStaticMeshComponent就可以轻松实现。需要注意的是,创造出的小方块的中心点是小方块物体的中心,计算坐标偏移时以中心点为目标。
2.最重要的一步莫过于设计一个合理的射线,令MutiBoxTracebyChannel返回我们需要的即将旋转的小方块组合。事实上,我们只需要令射线长与宽的半径足够大,涵盖这一层所有的小方块,再令高度足够小,不会同时扫描两排的小方块即可。至于选择哪一层的小方块,可以通过起点、终点的位置来调整,这里我们为了方便可以直接令起点和终点在同一地点。
3.小方块的旋转可以拆解成两部分。第一部分就是绕坐标轴的“公转”,小方块经过旋转来到全新的坐标,这个新坐标我们通过RotateVectorAroundAxis计算得出。第二部分是小方块伴随着公转进行“自转”,相对自己的坐标轴做与公转同方向的旋转,以此来达到“相对静止”的效果。
下面,我们给出基于以上思路的蓝图。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

PS学习记录-矢量图和位图

目录 概念说明 矢量图 位图 常见的格式类型 矢量图文件格式举例: 位图(标量图)文件格式举例: 两种图片的适用范围 两种图片的核心差异 1、缩放保真 2、色彩不同 3、格式 4、常用绘图工具 5、占用空间 6、转化 概念说…

Unity中使用矢量图SVG

1.打开PackageManager 2.点击左上角的号,Add package from git URL 3.输入:com.unity.vectorgraphics 免费下SVG测试地址:https://undraw.co/illustrations

ArcMap将png图像矢量化

一、将png图像转成灰度图 图像为语义分割模型生成的二值索引图像,直接用cv2的灰度读取图像模式,然后再另存。 二、配准 首先在ArcGis中加载带有空间坐标的图像,这里选择的是测试图像对应的。(加载图像可以直接拉着拖进来&#…

Android开发中使用矢量图

本文我们将介绍一些关于Android矢量图的相关知识点。最新的项目中要求以矢量图替代传统的.png资源文件,所以特意学习了一下Android中的矢量图相关概念,不得不说矢量图还是一个比较好的适配方案。Android从Android5.0开始引入了对矢量图的支持&#xff0c…

Android使用svg矢量图

可缩放矢量图形,SVG不会像位图一样因为缩放而让图片质量下降。 优点&#xff1a;节约空间与内存&#xff0c;常用于简单小图标 SVG 使用 XML 格式定义图形&#xff0c;标准svg根节点为<svg> 在Android中通过Vector实现对svg的支持&#xff0c;根节点为<vector>。 …

位图和矢量图转换工具推荐

相信做平面设计的大家&#xff0c;都遇到过素材是位图放大后不清晰的情况&#xff0c;十分影响设计的美观。而矢量图是根据几何特性来绘制图形&#xff0c;放大后图像不会失真。所以这篇文章教大家位图转矢量图。 一、使用CorelDRAW CorelDRAW是一款专业的平面设计软件,专注于…

将图片快速转换为矢量地图-半自动地图矢量化工具raster_tracer的使用方法

最近需要根据一幅jpeg地图绘制矢量地图&#xff0c;如果一点一点绘制太麻烦&#xff0c;又不想装庞大的arcgis用arcscan处理&#xff0c;查了些资料&#xff0c;发现深度学习在这方面也没啥进展。最后查到了QGIS有一款半自动地图矢量化工具raster_tracer可以解决这个问题&#…

关于 draw.io 矢量图 SVG 导出的研究

draw.io 是一个简单易用的图表 (diagram) 绘制工具 1, 可以用作一个简单的矢量图绘制工具, 画一些简单的图标或者流程图等等都很适合. 虽然好用, 但是在导出 *.drawio 文件为其他格式时, 大多数时候都需要额外注意. 导出设计时会遇到的问题及原因 对于 PNG 导出, 默认的设置…

【GlobalMapper精品教程】043:图片自动矢量化

本文讲解Globalmapper自动矢量化教程,配套案例数据。 参考教程:ArcGIS实验教程——实验三十三:ArcScan自动矢量化完整案例教程 文章目录 一、加载实验数据二、启动矢量化工具三、矢量化栅格四、矢量化结果五、注意事项一、加载实验数据 打开配套实验数据包中的data043.rar…

C#代码实现矢量画图

要实现C#代码画矢量图&#xff0c;其基本原理是先创建一个容器作为画板&#xff0c;然后创建Line(直线)、PolyLine(多段线)、Rectangle(矩形)或者Ellipse(椭圆)基本绘图对象生成各种矢量图形&#xff0c;最后把这些图形对象添加到画板中即可&#xff0c;一般用Canvas容器作为画…

matplotlib绘图并导出eps矢量图和svg矢量图

matplotlib导出矢量图并解决中文无法正常显示问题 做仿真经常需要输出各种矢量图用于论文插图&#xff0c;下面展示了导出eps矢量图和svg矢量图的方法&#xff1a; import numpy as np import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] # 用来正常显…

知识库AI机器人客服(基于ChatGPT3.5)对接-唯一客服系统文档中心

此功能是利用chatgpt训练企业知识开发个性化客服系统&#xff0c;可以上传自有数据&#xff0c;基于向量数据库与OpenAI Embedding&#xff0c;以及OpenAI chat/completions接口&#xff0c;实现的基于自建知识库的ChatGPT AI客服功能 管理员创建集合 向量数据库集合&#xff0…

Lazada跨境卖家必备的精细化运营工具Ushop BI的智能化选品功能

东南亚跨境电商市场的不断发展壮大&#xff0c;使得东南亚市场成为了许多跨境商家的掘金圣地&#xff0c;而Lazada作为东南亚市场的两大跨境电商平台之一&#xff0c;其发展潜力是不容小觑的&#xff0c;许多商家入驻Lazada平台是希望可以在这里将店铺做大做好&#xff0c;那俗…

跨境电商选品重要吗?

选品很重要&#xff01; 跨境电子商务选择的核心要求&#xff1a;优质商品&#xff0c;价格优势&#xff0c;符合跨境销售特点&#xff0c;满足目标海外市场需求&#xff0c;突出自身特色竞争优势。 跨境电商是如何选择产品的&#xff1f; 这个问题也很流行&#xff0c;应该考虑…

注册kaggle帐号及kaggle绑定手机收不到验证码的问题

由于自己在这上面折腾了不少时间&#xff0c;故写下这篇博客&#xff0c;希望对大家有用。 一、注册kaggle帐号 点击进入kaggle网站 kaggle网站 1.点击sign in 2.如果有雅虎、google、facebook账户的话&#xff0c;是可以直接登录的。如果没有这些账户&#xff0c;就点击Reg…

解决新用户注册Kaggle无法显示验证码的问题

解决新用户注册Kaggle无法显示验证码的问题 老板近期要求做一个比赛&#xff0c;需要注册Kaggle账户&#xff0c;但是在注册界面会无法出现人机验证&#xff0c;在这里记录一下解决的过程&#xff1a; 1.注册无法验证 2.尝试插件解决 为了解决这个问题&#xff0c;我参考了很…

手机验证码接收注册新账户

在写注册的时候想使用手机号进行验证&#xff0c;用来保证用户的安全性操作&#xff0c;因为以前使用的是邮箱验证&#xff0c;太麻烦了。所以在网上找到了一个比较好的第三方提供短信送达服务&#xff0c;有的还需要企业用户认证&#xff0c;这里我选择的是网易云的短信服务。…

我看CHATGPT: 为啥谷歌掉了千亿美金

两个月前&#xff0c;我试着想用 ChatGPT 帮我写篇文章《eBPF 介绍》&#xff0c;结果错误百出&#xff0c;导致我又要从头改一遍&#xff0c;从那天我觉得 ChatGPT 生成的内容完全不靠谱&#xff0c;所以&#xff0c;从那天开始我说我不会再用 ChatGPT 来写文章&#xff08;这…

chat聊天程序

服务端: package cs;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.*; import java.net.ServerSocket; import …

多家游戏交易平台发声,禁止未成年人买号租号

游戏租号绕开防沉迷系统事件迎来下文。9 月7 日&#xff0c;DD3737、交易猫、5173 等游戏交易平台相继发布声明&#xff0c;已采取严格措施禁止任何未成年人利用游戏交易平台买卖和租赁游戏账号。 同时&#xff0c;上述游戏交易平台还呼吁&#xff1a;游戏出版、发行、运营、交…