保姆级从0到1UE5 蓝图入门教程1:关卡蓝图入门
Posted 碳学长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保姆级从0到1UE5 蓝图入门教程1:关卡蓝图入门相关的知识,希望对你有一定的参考价值。
20230113
1、新建项目
新建选择 UE 5.1 项目
![](https://image.cha138.com/20230409/75c3ddebc3d14a0286f071a2d3b323d7.jpg)
选择蓝图,项目位置
![](https://image.cha138.com/20230409/f67b44c6e634412bb8f880d92272a8b2.jpg)
改变编辑器布局,选择经典布局
![](https://image.cha138.com/20230409/6a00375a0cb84d2e83080a5b28bf5557.jpg)
![](https://image.cha138.com/20230409/c51d0109ed5441469763c639ba49ddfc.jpg)
2、关卡与蓝图
选择 File -> New Level 准备创建关卡
![](https://image.cha138.com/20230409/696d6878b0c44fec96c192bb59303a4f.jpg)
选择 Basic,点击 Create 进行创建
![](https://image.cha138.com/20230409/6f65c8e97a0b4a6aa36bfb92a9a47cac.jpg)
Ctrl + S 保存新建的关卡
![](https://image.cha138.com/20230409/16470e840a964bc4b0c82aaeb4643efb.jpg)
![](https://image.cha138.com/20230409/fc8e8113ac464230b0a054ae6ea288ed.jpg)
关卡蓝图的打开
![](https://image.cha138.com/20230409/9d656d8cfb854c34aa5affd43c5841ef.jpg)
![](https://image.cha138.com/20230409/f71e8ccfad7b4213ab3272e8d878073d.jpg)
鼠标右键,添加蓝图事件,这里先删除默认的所有蓝图,然后鼠标右键,选择 事件开始运行(Event BeginPlay),即关卡开始运行时的执行事件,即关卡初始化时的执行事件,只会执行一次。类似于 Vue 中的 mounted,类似于 C# 中的 main 函数。
![](https://image.cha138.com/20230409/b0e001a0dcf540b2a452badc6ac104b3.jpg)
![](https://image.cha138.com/20230409/83c99d1c675943a38e8db36279c38bf1.jpg)
新建打印字符串事件,将 Event BeginPlay 与 Print String 进行连接,修改需要打印的字符串的值、颜色等
![](https://image.cha138.com/20230409/b4d2f9450ac84af6b05df307e291da9b.jpg)
然后点击 Compile 进行编译,编译后执行运行,可以看到运行后,游戏界面的屏幕上打印出了设置的字符串。(蓝图本质上还是 C++ 程序,C++ 程序是需要编译的,这样程序才能运行)
![](https://image.cha138.com/20230409/b8cb514b14554039a76a40e8f99e89e1.jpg)
![](https://image.cha138.com/20230409/f9889e58520a4e938d58f6728d404505.jpg)
记得随时点击 Save All,保存所有,进行保存项目,随时更改,及时编译,及时保存。
![](https://image.cha138.com/20230409/f2b6badb4ad3467f9b766d5056cdf570.jpg)
新建 Event Tick 蓝图,并与打印字符串相连
![](https://image.cha138.com/20230409/c39178badfe748388e8dd7d5601d40cc.jpg)
Event Tick 就是每秒执行帧率事件的次数,如 60fps,即60帧,则一秒钟会执行60次事件,此处为每一帧打印 Hello,World 事件
![](https://image.cha138.com/20230409/6f9378a5882c401ca99c836de752a091.jpg)
编译后运行,可以看到每一帧都在打印字符串。
![](https://image.cha138.com/20230409/102d3bdac09946239a8d4e4f34b15eb6.jpg)
鼠标左键按住进行框选
![](https://image.cha138.com/20230409/bac3400c3e5748bcacf4ea61bba8561c.jpg)
框选后,按下键盘的 C 键,可以弹出注释框,进行注释,并选中移动等
![](https://image.cha138.com/20230409/cdabd7f5a9124a60ba4baca61fbab404.jpg)
鼠标悬浮在连接线上,按住 Alt 键后再鼠标左键选中连接线,则可以取消连接。
![](https://image.cha138.com/20230409/11e6af86e9924f62a54be99336d68e39.jpg)
执行顺序,可以看到先连接的打印 Hello,World,再连接的打印 hahahaha,则运行后,会先执行打印 Hello,World,再打印 hahaha,由于是后打印的,所以 hahaha 会将 Hello,World 往后移。
![](https://image.cha138.com/20230409/6176bd30c74d4b7eb0a746d34f1c1b83.jpg)
按住鼠标右键,配合键盘上的 W、A、S、D、Q、E 键,可以进行场景的缩放、左右、前后、上下。
可以通过 Place Actors 下将物体拖拽至场景中,配合缩放,以及可以通过按下 Q (选择物体)、W(平移物体)、E(旋转物体)、R(缩放物体)。
![](https://image.cha138.com/20230409/d574a57e5bef467e9db2651525f0f026.jpg)
也可以通过此界面进行具体数值的物体的旋转、平移、缩放等
![](https://image.cha138.com/20230409/14648bcf522d403e9a47880331c7ea5f.jpg)
可以设置物体的全局坐标系或局部、物体坐标系的旋转、平移、缩放等
![](https://image.cha138.com/20230409/abc3becd62934c07b690f601a78601bf.jpg)
将一个立方体拖拽至场景中,然后通过 Edit -> Rename 对其重命名,如重命名为 CubeTian
![](https://image.cha138.com/20230409/2ff51d4f841447349d9b23c82efd5c8b.jpg)
![](https://image.cha138.com/20230409/c648659491da440ca5075a320cf62463.jpg)
然后打开蓝图,通过创建 CubeTian 的引用来对当前立方体进行事件操作、响应、控制等
![](https://image.cha138.com/20230409/afac85a0fc914064ac901301c4047453.jpg)
![](https://image.cha138.com/20230409/d00bff260b734c0380d58b7c5aaf126a.jpg)
鼠标左键拖拽出一条线之后,松开,可以设置与当前立方体相关的蓝图事件,比如这里选择 Set World Location(设置世界坐标下的位置)
![](https://image.cha138.com/20230409/e4328159b8704964b713bb68be1db40b.jpg)
这里在 Set World Transform 下的 New Transform 下右键,选择 Split Struct Pin
![](https://image.cha138.com/20230409/17f58f1e77924abdbcc2480596e52a8a.jpg)
可以看到有 Location、Rotation、Scale,即 Set World Transform 可以对物体同时设置位置、旋转和缩放
![](https://image.cha138.com/20230409/78e4c92f165d450e98ae84f93e0bf350.jpg)
先选中物体,设置初始位置为0,0,50,然后将将物体设置为 Movable
![](https://image.cha138.com/20230409/db3fecaa3e444910acd3e99aed042ee7.jpg)
在蓝图中,对物体设置运行时执行位置移动,如下连接方式,连接设置将物体移动至 0,0,20
![](https://image.cha138.com/20230409/a60e5c51ef254799a7cb55888d77fa71.jpg)
可以看到编译运行前,物体位置在0,0,50,编译运行后,通过蓝图的位置移动,在关卡运行时,就将物体移动到了0,0,200的位置,这就达到了控制物体移动的目的。
![](https://image.cha138.com/20230409/9aaf2982db8641d087662c784a92c637.jpg)
同理可以设置 Transform,同时设置位置、旋转,缩放
![](https://image.cha138.com/20230409/47cf0a3e93da4794b559006c14edc2ca.jpg)
编译运行后可以看到,物体在位置、旋转、缩放上都生效了
![](https://image.cha138.com/20230409/239505275f7748c2a065e5593b8cb549.jpg)
根据时间(计时器)进行时间上的物体控制:先创建一个浮点数类型的变量
![](https://image.cha138.com/20230409/4b530e301f04492d997ad9707e0e3e79.jpg)
创建了变量之后,先执行下编译,然后可以看到右侧出现了默认值,默认为0
![](https://image.cha138.com/20230409/319f8cfe0c7040dd85ab6be5a03567d5.jpg)
将变量从左侧拖拽至蓝图中,此时选取 Get time
![](https://image.cha138.com/20230409/a80317f8b2e04f0ca649dc9af052b248.jpg)
将 Time 和 In String 进行连接,可以看到连接前,字符串为 Hello,World
![](https://image.cha138.com/20230409/3b79cb473a4e42fa9b9abafa4f9054d4.jpg)
连接后,In String 就不是 Hello,World 了,而是 time 的值 520.1314,这里会自动将浮点数的 time 的 520.1314 转换为 Pring String 的 In String 对应的字符串值即 "520.1314"
![](https://image.cha138.com/20230409/79d25cc41ce7497784417bf3f9413a98.jpg)
编译运行后可以看到,关卡运行时打印了 Time 的值 520.1314
![](https://image.cha138.com/20230409/ce5371ccbab043709aa6cc0db6733084.jpg)
如下,通过先 SET 原始 Time 的值,然后再 get time 的值之后进行加法运算,打印,然后再获取 time 的值再打印,具体流程如下
![](https://image.cha138.com/20230409/8666a2a45f2e45c0bbf5222933a97f4e.jpg)
运行结果如下
![](https://image.cha138.com/20230409/999d3a3361044bb8a4c77d9738c97491.jpg)
逐帧设置时间的变化,进行打印输出,实现计时器效果
![](https://image.cha138.com/20230409/d2cccb5ba66f4118b721e53ea9ac7aa1.jpg)
![](https://image.cha138.com/20230409/fe4cbdc9402949dd85c2900a053b9507.jpg)
序列事件:Sequence
![](https://image.cha138.com/20230409/f6dfda4a844b43a9b60a1aa7979f6482.jpg)
![](https://image.cha138.com/20230409/7816e2a7459d467ca7c8db2d4782295b.jpg)
![](https://image.cha138.com/20230409/84c18bfa62d8484f8ed8b2e8b879e55a.jpg)
让物体动起来:让物体跟随时间进行上下跳动以及各方向旋转效果
![](https://image.cha138.com/20230409/9872a82bcb774a328511b0ca8efef58d.jpg)
![](https://image.cha138.com/20230409/81ec913d0eba4f27b0b38ba58f762278.jpg)
根据时间轴进行动态、线性插值的物体动画设置,先添加 timeline
![](https://image.cha138.com/20230409/a1c43c1cb2e542429929e2b5fc8291ed.jpg)
双击 Timeline 进入编辑状态,通过 Track 添加轨道,在轨道上右键可以添加关键帧,可以设置整个轨道的时间,如这里是 5秒
![](https://image.cha138.com/20230409/3dc0ab07125e44cbbff70deb818ef6bd.jpg)
每个关键帧右键,可以设置线性关系。左键选中关键帧,可以设置关键帧的事件过渡。
![](https://image.cha138.com/20230409/3b79658bf6dc4bba81ce9fb4a9d3fafe.jpg)
编辑后可以看到 Timeline 多了一个轨道
![](https://image.cha138.com/20230409/5ea9d5e595384792b6376f556862aa0d.jpg)
继续编辑 Timeline,勾选 loop,让该时间轴轨道循环往复的执行。
![](https://image.cha138.com/20230409/1c68f1cd27ce41018e70da2e7cf028b2.jpg)
将时间轴与 物体的 Location Z 值进行连接,可以实现物体循环往复的上下移动的效果。
![](https://image.cha138.com/20230409/696b69579de64f0a9c1204e21137ba48.jpg)
![](https://image.cha138.com/20230409/817d2002ccbb4f5fa4bf45b5f8a65c12.jpg)
也可以使用线性插值(lerp)的方式实现平滑的上下移动+各个方向旋转的效果。
将第一个轨道调整为时间长度为1,且为线性关系,用于物体的 z 值调整,并选择 loop,循环执行
![](https://image.cha138.com/20230409/04e35eeb7e084bd39456f2ca6e2d302d.jpg)
![](https://image.cha138.com/20230409/02ac5841c3754dc0a5313c195b0d143f.jpg)
![](https://image.cha138.com/20230409/5aba66660a7840dfbcb9ddf558205c5a.jpg)
可以实现物体,不断上下平滑跳动,以及各个方向旋转的效果。
![](https://image.cha138.com/20230409/49b73280b6084e918df6416a98b8acb6.jpg)
自定义事件:通过自定义事件,可以简化/美化蓝图布局,提升蓝图的可视性。
右键选择 Add Custom Event
![](https://image.cha138.com/20230409/2ca71587c1c84aed988f162021bedff5.jpg)
创建之后,建议用英文名给事件命名
![](https://image.cha138.com/20230409/89d5c2c0c2a8426b98da3c130e3492ef.jpg)
新建了事件之后,将新建的事件与 Timeline 事件相连,这样同样执物体上下并各个方向循环改变的方法,可以在 Sequence 里直接连接 HoverEvent 即可。
![](https://image.cha138.com/20230409/0e5ccb9866754789932e9810ac22906e.jpg)
![](https://image.cha138.com/20230409/85ed709ec1f14f9385213d6f93ac08d7.jpg)
这样蓝图就分为了上下两个,布局清晰。
自定义函数:通过添加自定义函数,可以让蓝图更加流程化,实现方法独立
![](https://image.cha138.com/20230409/1861dfb42865498781656abd11818691.jpg)
具体的实现方法,流程如下:
![](https://image.cha138.com/20230409/0d01643cfcea49f9bfa5cfb998482e85.jpg)
建立好方法函数后,就可以在蓝图中搜索并使用该方法了:
![](https://image.cha138.com/20230409/e8b7579198374c8cb81162d4d38880ec.jpg)
![](https://image.cha138.com/20230409/113bb40a27c7400287f2c6bde721337b.jpg)
![](https://image.cha138.com/20230409/8cdb99d60a8146949e9b33810880c7ad.jpg)
可以看到,输入的值是 3,通过自定义的立方运算函数,得到了正确的打印结果 27
![](https://image.cha138.com/20230409/6182d1c30e82411b92104c367a27ea5d.jpg)
通过函数的方式实现物体上下浮动的效果,并且可以控制上下浮动的速度:
按照如下方式构建了名为 UpDownFunc 的函数
![](https://image.cha138.com/20230409/e1c6a08c6a9748e88fc42a9402a8898a.jpg)
![](https://image.cha138.com/20230409/b5c4fbd7b8764057906b89c21a53ddec.jpg)
最后通过使用函数,可以实现物体上下浮动的范围以及浮动的速度
![](https://image.cha138.com/20230409/c1aa56efd0034c5fa1e75fa28c0b2ef0.jpg)
让多个物体可以在初始位置上下移动,并且每个物体的移动速度、移动范围各不相同:
现在物体是在指定位置上下浮动的,而不是在物体原本位置开始浮动的
![](https://image.cha138.com/20230409/2ef2d9ee9ceb4809a3a6574c6bf3f123.jpg)
现在实现物体按照指定位置上下浮动实现的蓝图逻辑如下:
![](https://image.cha138.com/20230409/525568792fa64e7da36cd78445c8c3dc.jpg)
![](https://image.cha138.com/20230409/0bf2736a020a4924a9d3e75d2edce81e.jpg)
选中一个物体,按住 Alt 键,同时用左键拖拽,即可复制一个物体。将物体的属性都设置为可移动(Movable)
![](https://image.cha138.com/20230409/bdb517a88b894f5d868ccf357a739078.jpg)
在物体的 Static Mesh Compoent 上连接 Get World Transform
![](https://image.cha138.com/20230409/404bc59cd05741a4b75b8e23fdea9760.jpg)
选中 Get World Transform,对 Return Value 执行右键的 Split Struct Pin
![](https://image.cha138.com/20230409/aaff1b85635e4a7880932c07e07b2e18.jpg)
得到三个,分别为 Return Value Location,Return Value Rotation,Return Value Scale,由于这里我们是要获取物体原始的位置信息,并最终达到上下浮动的目的,所以这里对 Return Value Location 执行 Promote to Variable,即对位置信息提升为变量。
![](https://image.cha138.com/20230409/c82893807f5d4b529a1fb3ac6a61194a.jpg)
提升为变量后,可以看到左侧 VARIBLES 就多了一个名为 Return Value Location 的 Vector 类型的变量。
![](https://image.cha138.com/20230409/d68d8ef9daa641069f35fe791870cbdf.jpg)
![](https://image.cha138.com/20230409/2cff49337b18447f94cc071c72529c73.jpg)
获取 ReturnValue Location 变量,并执行 SPlit Struct Pin
![](https://image.cha138.com/20230409/79d36eabfbd046cb971ad20c9c9e4a80.jpg)
![](https://image.cha138.com/20230409/b112ff3f8c2d4fc6ac234db913dcc8d6.jpg)
完整实现蓝图的逻辑为:
![](https://image.cha138.com/20230409/af4a4e2a1d334e8e906fc88405b69e4a.jpg)
![](https://image.cha138.com/20230409/dfc14654d5cc44f3a6c9b7e6de317c5a.jpg)
![](https://image.cha138.com/20230409/e1acb9fa51f044918e6a19bb9a9cd5e3.jpg)
![](https://image.cha138.com/20230409/3595bf3355954b41b875092e58da3db2.jpg)
![](https://image.cha138.com/20230409/a9c026a2daa54610aa87fde89291c1b4.jpg)
可以看到,物体是在原始的 xy 的位置上进行的上下浮动。
![](https://image.cha138.com/20230409/6881f65b932a48d5bad91b4d1b576690.jpg)
但这里有个问题是,虽然物体可以在指定的 xy 位置上移动,但不是在初始的 z 值上进行的移动。而是在我们设定的 z 值开始移动的。需要继续调整,调整如下:
![](https://image.cha138.com/20230409/4bdba17d2acf475dbe7484fb29c72b07.jpg)
也还可以设置 Z Min Value 、Z Max Value 等,让物体在指定区间运动等。
当前只是实现了一个物体的在初始位置的上下浮动,如何实现多个物体的上下浮动呢?
这个的前提时,我们可以实现把物体/模型作为参数传到我们的自定义事件中。
选择我们的自定义事件 UpDownCustomTestEvent,在右侧面板中的 Inputs 添加输入变量,添加时选择 Statice Mesh Actor 的 Object Reference
![](https://image.cha138.com/20230409/a9b10f5c18354acab655d8e34671b874.jpg)
重命名新加的输入变量名称,此处修改为 StaticMeshConponentParam.
![](https://image.cha138.com/20230409/5a9073ff349c457cad6250073476d09c.jpg)
此时就可以将 StaticMeshConponentParam 和 物体的 Static Mesh Conponent 相连了,此时任何物体的静态网格体就作为了 UPDownCustomTestEvent 事件的输入变量了。
![](https://image.cha138.com/20230409/c49165295fa4423693ce644a10e9d9d5.jpg)
![](https://image.cha138.com/20230409/134a82b95b5f43e4b7c3093d7d3985a2.jpg)
接下来要做的就是将 CubeTian 这个物体传给我们的自定义事件的 Staticmeshcomponentparam 即可。
![](https://image.cha138.com/20230409/d71c835d5220466a8994e6f5d6a0259b.jpg)
![](https://image.cha138.com/20230409/5576cfc6191b426da30a0384e02ed549.jpg)
编译运行后可以发现,CubeTian 这个物体依然和之前的效果一样,按照初始的位置进行的上下浮动。
![](https://image.cha138.com/20230409/05d37b48595544baa62a5df43e50ce15.jpg)
同理,此时就可以继续添加第二个物体实现同样的上下浮动了。
![](https://image.cha138.com/20230409/6ed757bf323a4daaac76dd53048b0197.jpg)
蓝图中添加第二个物体
![](https://image.cha138.com/20230409/a4d4d52da79543ce9676550c99868727.jpg)
添加第二个物体的静态网格体
![](https://image.cha138.com/20230409/bf4ba48daaaa41ec97f62c29b0a6366e.jpg)
获取世界变换,并将第二个物体的世界变幻的位置提升为变量
![](https://image.cha138.com/20230409/8616a92df6bb4a3bba3cff8bf31c3ded.jpg)
将获取位置变量信息并存储到 Return Value Locaiton 0 的事件(SET) 和 Event BeginPlay 的 Sequence 相连,实现关卡运行时就获取第二个物体的位置信息,并将该位置信息存储到 Return Value Location 0 这个变量中,即将第二个物体的位置信息赋值给 Return Value Location 0.
![](https://image.cha138.com/20230409/dca31f662047442c9d2c1d4307eda0e5.jpg)
由于 UpDownCustomTestEvent 事件中目前使用的还是物体1(CubeTian)的位置信息,因此需要调整为可动态获取任意物体位置信息的方式。
![](https://image.cha138.com/20230409/6592e99a480f4a4489a85569ebb4e769.jpg)
需要位 UpDownCustomTestEvent 新添加一个 Vector 类型的输入变量,此处命名为 Location
![](https://image.cha138.com/20230409/3109475ddf6b48aa86d3c3ef18c8e409.jpg)
左键拖拽 Location,选择 Break Vector,进行拆分变量,也可右键选择 Split Struct Pin 进行拆分。为了保证 UpDownCustomTestEvent 的美观性,选择使用 Break Vector 方法。
![](https://image.cha138.com/20230409/4094042acc4c4176b5acdef4a50a8761.jpg)
![](https://image.cha138.com/20230409/c892b1fbbfdf455983d10d475a2d01d9.jpg)
执行之后如下,生成了 Break Vector
![](https://image.cha138.com/20230409/4243e9f556274620a1a773a631bd0bc6.jpg)
然后对 X、Y、Z 分别进行连线,如下所示:
![](https://image.cha138.com/20230409/3b050e2b9d2c4c518f40dd6fd6fb020c.jpg)
然后分别将物体1(CubeTian)和其对应的 Location 变量(Return Value Location)、物体2(CubeTian2) 和其对应的 Location 变量(Return Value Location 0)与 通用的 Up Down Custom Test Event 进行相连,具体如下:
![](https://image.cha138.com/20230409/153f96224ff045ee9242525668ef23bf.jpg)
然后执行编译,运行,就可以看到,2 个物体在初始位置开始进行上下浮动效果:
![](https://image.cha138.com/20230409/346fff01ead3443dacdecfc2405178d5.jpg)
完整蓝图如下:
![](https://image.cha138.com/20230409/a2007d9cd237468eb690210b803a5015.jpg)
![](https://image.cha138.com/20230409/8ec8004256844c9ab341ddce5b11e15d.jpg)
![](https://image.cha138.com/20230409/05d6410c76a24b58871d2dfc67abbbd4.jpg)
此时虽然可以实现 2 个物体同时上下浮动,但是速度、时间、浮动范围用的都是同一个值,如何实现不同物体,不同速度、不同浮动范围呢?这就需要继续为 UpDownCustomTestEvent 添加输入变量参数,将速度、时间、浮动范围等其他想要个性化控制的信息作为输入变量参数,这里添加了以下几个:
新建了三个 Float 类型的 Speed、ZMin Value、ZMax Value ,然后将 Speed 的默认值设置为 1.0,其他值也可以设默认值。
![](https://image.cha138.com/20230409/cb3e4368c46b4b5c9a74dff7cec5e491.jpg)
然后将 UpDownCustomTestEvent 中的 Speed、ZMin Value、ZMax Value 分别与 UpDownFunc 函数中的 Speed 、Z Min Value 、Z Max Value 对应连接,连接之后如下:
![](https://image.cha138.com/20230409/036a58973d8843fdb49bef8eea60ca88.jpg)
此时就可以向传递物体和位置信息的 UpDownCustomTestEvent 里传递或设置 Speed、ZMinValue、ZMaxValue 了。
![](https://image.cha138.com/20230409/d01ea6feb9024ce781fae47fd091da52.jpg)
最后可以看到效果是不同的物体上下浮动的范围、速度都不一样了:
![](https://image.cha138.com/20230409/84e3604250054a9eaaf9dbb51fd0cbd8.jpg)
完整的蓝图如下:
![](https://image.cha138.com/20230409/49d121f3e2b649768b5b330e02e5181d.jpg)
![](https://image.cha138.com/20230409/1b2472c829ab4e77ac6f742451408aa6.jpg)
![](https://image.cha138.com/20230409/b66893d953dd4c38bcb094da3eca7de7.jpg)
![](https://image.cha138.com/20230409/d8430f4c4bc043dfb22a2c8aa5592420.jpg)
![](https://image.cha138.com/20230409/f62152a76c414a15b4644e412eaaf472.jpg)
场景、物体的光源效果:
可以在场景中拖拽入 2 个 Spot Light(聚光灯),然后可以分别设置两个聚光灯的位置、光源强度等
![](https://image.cha138.com/20230409/a6831bd9d29e4894b636b7d0cb6ec51c.jpg)
![](https://image.cha138.com/20230409/d877991db9d94028995548ee06228c46.jpg)
然后可以设置场景光源的光照强度为 0,就可以实现周边黑暗,只有 2 个光源照射物体的场景效果:
![](https://image.cha138.com/20230409/0d8c509e347247ec857bcb22c2b9f9bd.jpg)
![](https://image.cha138.com/20230409/0ad81937886d42a3b98fca5c94519a92.jpg)
还可以继续修改光源的色温、颜色等等。
可以通过在 Outliner 里新建文件夹,将同一类的东西放在一个文件夹,形成一个良好的组织结构。
![](https://image.cha138.com/20230409/4b224124f8294ea184373416227a3553.jpg)
比如这里新建了 CubeTian 的文件夹,将 CubeTian 的物体和其相关的光源 SpotLight 放在一个文件夹里。
![](https://image.cha138.com/20230409/c9979c67787842ebb583f25ccc37de9b.jpg)
可以同时按住 Ctrl + L 键 不松手,然后只需要转动鼠标(不需要按住任何鼠标上的任何键)就可以调整天空的时间(白天、黄昏、黑夜等)的天空效果
![](https://image.cha138.com/20230409/cab39c2a516f43da8234f06eccfbd7cf.jpg)
![](https://image.cha138.com/20230409/3a5a42a98a484b588f0965ef6c20ea13.jpg)
UE 中的 Actor 和 Component 的含义:Actor 相当于一个角色/人物/演员/物体,Component 相当于这个角色/人物/物体具有的技能、属性、功能、模块等,比如一个人可以吃饭、睡觉、跳跃、奔跑,一个人就是一个 Actor,而这个人拥有的 吃饭、睡觉等的能力相当于 Component。
如下 一个立方体,CubeTian 是一个 Actor,它拥有一个 StaticMeshComponent,就是拥有一个静态网格体(不会变化的网格体)。
![](https://image.cha138.com/20230409/229180b5c9814d59a2a13b4d1969a8c5.jpg)
![](https://image.cha138.com/20230409/7f71d27fe1524cb3b30c192fa06efa7f.jpg)
上面我们讲的是通过关卡的蓝图来进行的设置,如果是想要单独创建一个蓝图呢?
蓝图建立的规范与创建 Actor:
一般蓝图会命名为以 BP_ 开头的名称,蓝图的全程为 BluePrint,比如 BP_Cube、BP_TianCube 等。以 BP_ 开头可以一目了然的知道这个东西就是蓝图。创建的 BP_Cube 等蓝图可以放在一个文件夹里进行组织管理
![](https://image.cha138.com/20230409/1fbfccf509ee48bc9f23eb8d7f7d24d0.jpg)
![](https://image.cha138.com/20230409/ef8e9f0beaac443791266dd53a7295c2.jpg)
创建蓝图时,可选择的有很多,这里就默认选了 Actor
![](https://image.cha138.com/20230409/f5c42635356449d285c9b462ea8eeb93.jpg)
在新建的文件夹下(这里文件夹命名为 BP)新建了一个蓝图(这里命名为 BP_Cube)
![](https://image.cha138.com/20230409/0cf1c19a19f24e938becac14e5f399c5.jpg)
双击 BP_Cube 可以进行编辑,进入编辑后可以看到新建的蓝图是空的
![](https://image.cha138.com/20230409/35a1c0a64c9248e9b5024149d28ec563.jpg)
可以在当前蓝图的 Viewport ,在左侧 Conponents 点击 Add 添加物体,比如选择 Static Mesh,或者直接选择 Cube。这里直接选择了 Cube。
![](https://image.cha138.com/20230409/d9a51234df144b61bde6fd0f5954222b.jpg)
这样就可以看到蓝图视口中多了一个立方体
![](https://image.cha138.com/20230409/4e54241fc65b449a88cbfe4d85e5f902.jpg)
还可以继续添加,比如这里添加了一个 SpotLight
![](https://image.cha138.com/20230409/dbb3e4b3604f428e9c2127c512d28844.jpg)
可以设置 SpotLight 的光源位置、强度、方向等属性,可以看到 SpotLight 是在 Cube 的下方的(而不是平行的下方),存在着一个父子级关系,也就是当前 SpotLight 是 当前 Cube 的子级,这意味着当 Cube 被拖拽移动时,它的子级 SpotLight 也会跟着移动(如果是平行关系,非父子级关系),则灯光不会跟着物体移动。当然也可以通过拖拽的方式,来改变他们的父子级关系。
![](https://image.cha138.com/20230409/f42d01511d0e4dffb5c6fa0ce6dc2555.jpg)
拖拽了物体和灯光之后,执行编译。然后就可以看到蓝图上有了东西,当前蓝图可以直接拖拽至场景中,这样场景中就添加了一个具有灯光的物体。
![](https://image.cha138.com/20230409/ef6edb6018ac43cebcdf457afcd26aa9.jpg)
![](https://image.cha138.com/20230409/eefde71bac70484ea3bd703895634292.jpg)
Actor 的蓝图:
选择 Event Graph 窗口,将默认的蓝图节点都可以删掉
![](https://image.cha138.com/20230409/ed27b9bfd4894fe29befe1821e870552.jpg)
然后从左侧将 Cube 拖拽进来
![](https://image.cha138.com/20230409/4dbab60630c846a3a574eb370daac18f.jpg)
然后选择设置相对位置[UE4蓝图教程]蓝图入门之变量使用
虚幻4的蓝图,其实是一种可视化编程,背后需要一套很复杂的东西才能将前台的逻辑变得简单,它是将一些东西封装成小框框,然后靠一条条线来链接起来,这个的好处就是很直观,给很多对写代码天生不感冒的人,提供了一种新的创造游戏的方法。
虚幻4的蓝图分为两种,Level Blueprint和class Blueprint,Level Blueprint用编程的角度来解释,就像是子在一个文件里,或者是场景里,写的面向过程的代码,说有代码按自身的顺序依次执行,而class Blueprint 用编程的角度来解释,就是将我们所需要的东西,操作,封装成一个类,我们可以在以后直接使用它的对象,十分方便,也十分强大
首先,我们先来认识一下虚幻4蓝图的变量,虚幻4 的蓝图的变量,跟我们编程里的变量基本一致,并且,他还给封装了好多类和结构体,这些东西我们在用到的时候再来说
接下来是开关门的蓝图,具体做法请看官方视频:
点击看大图
- OnActorBeginOverlap是进入触发器时,触发事件,然后走到Timeline,这个蓝图是说,给对象两个状态之间一个过度,之后链接到Set‘ActorLocation,设置门的位置。
- OnActorEndeOverlap是离开触发器,触发事件,让门回去,只不过是相反方向移动。
- Event BeginPlay是游戏一开始就触发的事件,之后是一个Vector的set方法,他的值就来自于门的Location。这个蓝图还是比较好理解的,大家哪里不明白可以在下面的留言里回复,我会第一时间解答
- 52VR补充一条:Door InitialLocation是一个新建的变量,在Event Begin Play事件中,被Set了初值,然后在开关门事件中 被引用。
以上是关于保姆级从0到1UE5 蓝图入门教程1:关卡蓝图入门的主要内容,如果未能解决你的问题,请参考以下文章