教程开始前,我们先回答一个问题:为什么要学UE?
& `, F- Q+ N9 I/ M5 R 全球最开放,最先进的实时3D创造工具 这是UE官方的回答,但或许对于初学者而言,在享受UE开源、技术、管线等各方面的优势之前,最大的焦虑可能是,这么NB的引擎,一定很难学吧?当然,如果你想深入研究UE,必然会有很高的学习门槛。如果仅仅是想要利用UE享受创作的快乐,其实很简单。" x. ^$ ]1 K& U0 B8 E% a
不积跬步无以至千里,让我们跟着教程一起来实现一个小游戏吧!这也许就是你成为UE5大佬的第一步呢?) a2 l4 m! L" y+ g
下面就可以对号入座,看看你是不是我们教程的目标用户:
' X4 @/ Q" ]/ ~
: \% I5 o+ F. Z. r# v# j+ K- 我完全没有任何经验,但是想要尝试自己做游戏;(教程中部分内容会与Unity对比方便理解,如果没有接触过也不影响学习)
( t8 y. d5 j2 [+ c3 _2 M - 我有一定的编程\Unity基础,想要学习UE但是不知道从何入手;3 L0 ]- B; }' e% y+ D- J
- 我会用UE做美术效果,但是不知道怎么上手蓝图\逻辑开发;
/ }2 u& }6 d9 e* V6 X - 我会一点UE蓝图,但是用的不太好,想要更多资料学习(可以重点关注支线部分,整合一些入门\进阶的教程)
" O! I9 s* Z, q# F 如果你符合以上的任意一项,那恭喜你我们是志同道合的朋友,欢迎继续看下去吧!; J# ^; O* V+ L: D9 o
<hr/>零、课程概述
2 z6 W5 j1 y7 j y& V G, G
: E9 l" R' n8 ?目前,在网上已经能找到各种各样优秀的UE5教程,无论是入门,理论,还是方向专精,甚至官方文档和案例,都已经有丰富的学习资料可以参考。/ y* O" K9 Q8 ~! [% J: I. Z
笔者也是站在巨人的肩膀上,学习了数月才大致对庞大的UE有一个粗浅的了解,在这样的背景下,重复造一个教程的轮子毫无意义而且浪费时间。但是,在最初的学习过程中,经常陷入:“这是什么?他跑起来了但是为什么?我为什么要这样操作?我应该干什么?我还能干什么?”
; X6 w [ Z2 K3 g那么本教程的核心设计思想也是围绕这些问题展开:* Y& [8 g- F% S+ {" m
1、主线支线分配:主线部分主要讲核心流程,碰到一些可以拓展深入的部分,或者能深入了解的理论知识点会放在支线部分,保证主线清晰,能够覆盖各个方面,支线提供更多学习内容,更有针对性。 & X+ R2 t% q; z
2、理论实践结合:UE除了基础功能,也有一套自带的Gameplay框架,所以在使用的过程中需要遵循一定的设计才能用的更好。在本教程中也会尽量从不同角度去解释这些问题。$ A6 x" W& U( r3 }" H. G( p" s4 M
3、简洁+正反馈:简化案例,明确每一步的操作方法和操作目的,减少噪音,尽量保证每一个操作都能在引擎里看到效果。
$ N; S" n$ m' R0 i) b& U' r4、授之以渔:在前半段完成基础操作教学,做出简单功能以后,逐渐减少手把手文档式教学内容,提供常见的思路与方案(Debug、测试、实现),尝试自己解决问题。
2 G- d/ D. V: v- f3 U如果你想要做酷炫的渲染效果,或者已经了解UE的基本功能,想要进阶学习C++;尤想要学习AI\动画等进阶功能,本文可能不太适合同学继续阅读~
; p3 \3 ^2 ^- P3 L' G& P+ p" k
: h" W; D3 ]) w! ]: A0 c0 P' P q9 v; J- } R$ D! b& K
教程大纲# t4 G$ F% G. P+ p0 l$ |
. j3 D& T9 r7 ^$ ^- z<hr/>下面,让我们一起进入正式的课程吧!9 t$ Q; v, l' L2 g1 u& S; ]/ x
( P1 [4 _* P' e" z4 _先来看一段完整的成品展示. q! Q4 S2 _3 n0 `) m% `5 r
https://www.zhihu.com/video/1669414768946388992
! Z. |+ u/ L8 \/ h9 r* k( M5 P! k# E9 ~- g
第一篇章教学内容,共分为5大部分:. U' V! t: N# [
2 E$ P" P1 j; A; \5 [: P+ C- 基本操作
- Q& V* }# V& M3 m - 模块概览
3 W0 ~% t' v( l$ j) K! J - 蓝图基础功能3 ^) y, Z1 t R( i
- 测试与Debug技巧8 O1 Z' d5 \+ U4 G4 F) h3 G7 B
- 举一反三实现简单玩法
( K% o+ T; H9 X# C. k; s$ x. m4 G7 r 一、准备工作$ E G6 w8 x# P; B, G
8 F, n ~; {# Y
主线:/ f2 r9 I0 W+ v
1、创建账号2 x) z9 u; \; K$ q3 j2 `6 o
5 l% \# d( v1 o& @4 S
工欲利其事,必先利其器:第一步我们先把账号注册好! R6 v' i+ ^6 Y# ?0 ~ ~
( A2 U% O' g$ e0 ~) V
- 安装Epic Game Launcher(Download Unreal Engine)" ~1 l! O* X& M, s2 z, {9 w7 o5 Q
- 注册+登录账号(注册 Epic Games 账户 | Epic Games (unrealengine.com))
* M, @/ m9 V2 Z) @ - 安装引擎详细文档(安装虚幻引擎 | 虚幻引擎5.2文档 (unrealengine.com))1 e% ` A9 y- M0 X9 P* R
+ G t% T W( i; A% k
* q$ V( _8 {5 i' W0 |, O
5 A, |6 v0 y- D8 b* F" ^
! m$ Z$ f1 W8 Q u+ c2、创建工程
- o2 q5 `8 U" J4 x* X& b6 c. ~. F! u0 J5 d# p' N5 N/ E
* z8 `: g) u: {: Q' y

! p8 B, v% ]$ _3、调整布局
% V8 _; o: J* Y! Z1 a; q! c! d8 U3 x
; a( ] s- h- w, |7 a& ?8 l0 B( M如果一不小心窗口搞乱了,可以参考如下图操作恢复:
J4 H% x* d; m1 {3 w! Q$ p2 s1 d
6 ? D4 r( q; R7 F4 d
引擎默认布局如下图:9 l5 f! d) U# i* v
( U7 l/ B2 X) B
0 u4 t2 `! h6 N- J! ^& z
7 g+ Z0 M3 Y7 {如果不希望内容浏览器悬浮,可以点击上图中的锁定内容浏览器选项
! Y0 E& U3 @' Z# Y, E5 l8 b, R; J, h6 ]# h3 c
主页面注释:2 n0 g$ l& k( N5 z0 q
! L3 d( O& A% g( ]& e" Q7 K8 d9 L 0 ]/ I+ v0 p. i5 p( e" n
参考教程:UE5入门教程-4.基本操作(移动、旋转、缩放)_哔哩哔哩_bilibili 支线:
* ]3 o3 }$ R* o/ `" m, N; M为Unity开发者准备的虚幻引擎指南 | 虚幻引擎5.2文档 (unrealengine.com) 4、新建关卡8 H: ]1 d5 O6 f% n w* o! D
9 K3 Z) Z' f- e' K+ R2 L* w
在内容文件夹 - 右键 - 新建文件夹 - 双击打开
k6 r- W5 ~# Q8 _/ n5 T
" h3 u8 y/ y% H, x- B3 u2 k' f% W
+ n4 K" F/ X/ U' G e在Demo文件夹 - 右键 - 新建关卡 - 双击打开$ ]: s2 N- V+ O( Q$ p
, _; {, F0 e4 b, _6 ]; V* j
- f* e! B, n! a: L, p二、光照 F; @$ g5 a6 h
- C$ c" L8 R( ~主线:
5 A* D' R- _/ O, u% ?% p1、创建' o$ N. Q0 m5 @
3 \* S% F. K+ m& T
窗口 — 环境光照混合器 — 全部创建出来 A& B! X: M; P' v, `; g
9 X2 n5 O6 O6 }& g- F- m
) C+ v$ _8 ?$ `0 V1 M下一步:. O4 Y! o3 o% m1 h; z; V0 Z; r
9 ?7 q5 p1 ?& W# ?
8 Z) f( e) |- u
支线:) _; P% x7 a4 k% N( T4 `
感兴趣具体功能的可以看一下: ^9 e! D6 o2 \6 u) p
虚幻引擎中的环境光源混合器 | 虚幻引擎5.1文档 (unrealengine.com)
; a h1 o& W7 Y, XUE5入门教程-16.点亮场景_哔哩哔哩_bilibili 或者玩一玩这个插件:
' A+ V# q# J& h2 Z& P' EUE5 超动态天空 Dynamic Sky | 自制教程 |难点解析 +使用心得|虚幻引擎_哔哩哔哩_bilibili7 \! Z* B r# l X
其他光源教学:s06-光照系统介绍_哔哩哔哩_bilibili 2、整理场景结构- h0 {! e* d7 W4 m' ~$ S
- J) k$ u# {$ D
在大纲窗口 - 右键 - 新建文件夹 - 整理一下场景结构3 y' J9 r% f& g) Z6 I
6 n, `/ Q9 q6 K4 X& h

1 c/ Z) S/ `9 z/ e: m6 i三、地面
: F+ P8 {" t- F7 o+ b) D+ W! v& c0 m2 V2 l. g$ t3 E
主线:. c3 n( m) ~; b2 b1 \7 J9 x
1、打开放置Actor面板,切换到形状& k5 W/ M, k+ q# p* B& \
6 E- y, R; c6 S% H' ]
0 r4 H l8 V. C/ E% j9 b, ^
下一步:# D& |- @- C! c; o! F( N
: x' u& }/ |3 `! m
7 \) |/ \ s, ~支线: H5 h' \ i. N
现在已经可以放置简单的白模地形了,如果有兴趣可以了解一下UE的地编/建模:
8 ^3 ^9 _, d: ?# DUE5地编教程-1.课程简介_哔哩哔哩_bilibili
$ `; P z ~/ J: U. EUE5 Modeling 01: 造型工具 Shapes_哔哩哔哩_bilibili 四、初识角色
6 j& Q! J/ V8 u9 x a5 S q9 l4 ?2 Z2 { Y' h {
主线:
8 P+ p S8 z/ @7 o1、第一步:现在已经能在UE里面搭建基础的地形和光照了,运行游戏之后会发现角色出生在场景相机位置- p1 t7 A0 A' e1 Q
9 D0 F4 m2 O4 `/ ]% l! `
( n3 t- E# D) z3 P- e3 E9 P$ M% K* R0 g4 M5 D( k
/ n$ }1 e/ b6 P, A+ ?2、在场景里放置一个玩家出生点,可以控制玩家的出生位置,再次运行可以看到角色出生在平面上了
; h: _; x! N# d( s% m
6 o6 q; Q/ I9 F+ p- g
, {2 s% J1 |) d1 M1 {9 D5 P0 n5 X- X* m' X' I
(WASD + SPACE 控制)
# P, L3 Q7 H; C* n# W
- ]5 |: e! ^0 ]6 k$ D% c4 i) f现在在游戏里已经有能控制的角色了,但是还有一些问题没有解释:
D- Z% i o- Q" \+ n' o+ k1 a- r! d3 J3 x( G
- 为什么初始化的是这个角色?
- z% U' X2 w$ D9 [9 w# H - 玩家的输入怎么处理,角色怎么动起来的?
0 E! ^: @. s( e5 S4 u" p1 f - 角色的动画是怎么做的?. n9 }0 H' G$ F# p* Z* ?
我们先搁置这些问题,做一个简单的金币,如果你很感兴趣这些问题可以看一下支线。
- C; ]6 z, L0 j6 `3 q3 w支线:
$ o, m! q% q, e+ \, m8 b L, K6 |3 pUE5自定义角色教程-1.课程简介_哔哩哔哩_bilibili 五、蓝图/ _" a; L" K0 x, M' e; w# q
/ l J7 J) D5 O% f0 F( K, R) @
之前通过这个面板,我们可以拖一些简单的物体到场景里面,但是会有几个问题:, y# b# I2 b: I1 g# I. `2 w
6 v$ d$ a' U: u
- 物体没办法定义自己的逻辑(运动、碰撞等等)
# I- s' d; X( v. ?- c0 q - 复杂的组合物体没法复用,每次都要重新组件,蓝图类类似于 Unity 的 Prefab,能够将带有逻辑的复杂物体打包成模板,方便直接复用。
/ t& M) D; O4 ]0 y- C4 t# ], i% X
6 @* j' [6 o7 S* U4 _/ v - M8 \2 o5 o N2 f/ ^( }: [
1、创建+ z9 X1 S/ v1 G0 S( u; v: f
6 ]# W1 B/ z2 g9 n右键新建蓝图类:
' X1 k% d+ ?8 w4 |+ u4 q1 n6 H& H6 R/ s8 j) p% X: g
! ?/ `6 d9 V) F, }
(2)选择Actor
) }7 W' J+ G2 u* E- N+ A3 T& f4 ^# H/ o; `) L5 n7 U+ [* B: p

& E4 @% _) P7 E% V1 u支线:蓝图接口、继承与多态 - 哔哩哔哩 (bilibili.com)
. q/ L* w* n& l* X/ [& u不建议现在看,第二章还会出现 (3)修改命名
$ v( ]8 \# q+ |. d7 |: j9 Y" p# N5 n" M0 ~$ z0 `( N/ u4 n# T- ?
/ D( G* {, L: @$ r0 H* s支线:虚幻引擎项目中推荐的资产命名规范。 | 虚幻引擎5.2文档 (unrealengine.com) 2、模型
9 g' q( i" g5 m+ h" I9 \
) B- r7 O$ E$ C- b8 `. O创建 金币模型(改名),并调整旋转、大小。9 ^2 ^/ ^7 w/ r5 Y+ R$ r. \
5 c8 m5 H) m M; a- T/ r+ G6 D$ t p0 X
% b3 Q$ ~8 d6 u. {- n
2 l) m* ^- e( S' Q7 M' s# A3 H
, y9 I* \: o& `# {
3、使用
' D, `; V" r! r2 l2 B V: Y# P; p7 Y# F! `7 {
尝试着拖进关卡,就能看到模型!
& v, t- t- r& p$ e" i3 |' E1 M- f) e8 X1 O
2 q! F1 S; ~5 w) x" C6 |
4、Hello World% L# @7 i5 R& i' _0 }
7 N" [& r2 @/ c: p3 s再次打开蓝图,点击事件图表,这是蓝图类的逻辑部分:
! X h1 e/ y8 [
* s( C) i9 @9 L2 g+ Y4 ^9 k
- F9 b8 \# h; K- v9 S) }7 \那么,如何创建我们第一个Hello World:
) \; s+ ~: e* k/ T3 p6 u7 @: ~8 B, }
" P, k: h; E$ i- i
9 B2 x0 h Y* H3 ]- p, W
https://www.zhihu.com/video/1669419167345168384
, A9 d# p$ [& M" P! |
2 N7 ?8 [2 x2 a& X0 W4 S' e- 红色 的节点代表事件:当xx发生时;
" N) _* @ v5 c1 V. \0 t7 R* J - 蓝色 的节点代表函数:执行某一操作;
2 @! @4 i& w! l3 B - 白色 的线代表逻辑执行顺序;8 z; `8 V9 a5 _6 ~7 }4 r
- 绿色 的节点代表纯函数(计算):获取计算结果;) F6 U, m5 u% x8 \" j1 D) U
- 其他颜色 的线代表数据传递。
/ ~. @$ L# E4 P: A* `
& y1 O" V# m" O* q7 b
. z) Q/ u v, s! U. t
比较常用的事件有 Tick 和 Begin,Tick 在每一帧运行,Begin 在开始时运行;
+ S$ [6 y; T0 ^" ]7 @* z) V5 u$ \& T删除Tick部分的逻辑,尝试打印自己的命名:
6 z# ?; x& @" y' ?* S; ^; ~9 Q; |& ]; R

: O8 ~/ y- d/ Y快捷键:. U7 z; `7 I1 T# u2 ^
$ E& L" C s/ ?5 N- Alt+鼠标左键 = 删除连线
$ ?) A6 b" k. S" g5 M6 n - Ctrl+鼠标左键 = 重新连线
8 u3 X* A% |. S0 Y4 M0 \# Z - 双击鼠标左键 = 改变连线路径
* q5 [! j4 L' s0 P$ c: v0 z - C = 添加注释
: S6 M3 J# t/ _1 f/ ` 支线:蓝图 – 节点这么多怎么办?! Z6 `- X! n. k9 w
Q:节点这么多我咋知道用哪个?% Q- s: P8 ?) i3 J, ~$ S2 u
A:用多了就知道了
8 ~% a0 t/ a3 }' uA:看你想做什么,Google/GPT/文档/直接搜,基本上都能有答案$ ]0 q' n- T0 B; M
Q:搜索的时候有什么技巧吗?
3 m% b+ V% L$ S6 D' P BA:用多了就知道习惯性的命名,就能大概找到对应的节点* v' g+ J4 a8 x1 T2 J
A:按住Alt能看见英文名,直接搜英文缩写就ok
' O+ A. Y: \- r$ m: ~$ }A:不同单词之间不用输入完整,用空格隔开也能搜到
2 z0 [# U$ c$ f4 v* N, `) P
" G9 B9 E. C- c5 i' Q' R+ s- ]5、转起来, ?3 g o$ e! t( r4 n( w
! M( |6 F3 J8 ?0 i接下来,我们要让金币转起来!
, K" V1 \* D* i
3 t$ \ s9 Y, [
6 j1 i( n# A; S5 l9 `1 @! U3 S1 B: A6 f8 M) ~! \( f r
添加本地旋转1 }9 D( R; h9 f, i
2 G6 l$ w7 T+ h9 q
0 P/ u& Q7 g7 W
, r. r0 c" }( c" t+ Q4 e
修改旋转X轴值8 y6 u# F5 q; \8 a# A
) P0 p$ _( b7 I" K7 r
运行一下,金币开始转了!
7 _3 b& E/ s7 Z4 @% C
6 N/ \) r8 l+ i# s5 S! g% k; y. F
7 R0 h; U1 c0 t! y' N( o3 k受到设备性能等因素影响,每次运行帧率可能不同,所以每一帧Tick的间隔有可能不同。如果每一帧都旋转固定的角度,可能会出现速度不均,所以一般我们都会把速度*每一帧的间隔时间,保证匀速旋转。
+ p- R9 [5 |+ e! v* n
" x3 y; ?, |. ^2 b2 I
7 y4 Z' f: R" A3 S, z8 M m& n定时器:3 @+ Y4 ?( d* m9 x' j/ f1 w
Time秒之后,调用一次Event函数,Looping决定是否每过Time秒都会触发。所以要新建一个Event承载需要运行的逻辑,然后在初始化的时候,让定时器周期调用。# t8 x& B& W, C! P+ v. J# ]0 ]
5 T) H, c# U U; y, T
3 U! S; n5 Y2 E0 S
如果你想要每秒触发一次的事件,应该像这样去配置:" q% @$ P" i; z
支线:UE4基础教程系列-P3 时间管理大师(Base)_哔哩哔哩_bilibili 6、参数
1 p9 s+ Q$ Z( F" s) h* ]8 p6 h5 `. n
% R; H* \2 q$ W5 D* s1 M现在我们已经会让金币转起来了,但是旋转速度是固定的,如果我们想让场景中的不同金币有不同转速呢?
, A0 i9 I* i. P+ e& B. ~7 O6 p" C. k# T% N
: d2 f4 e( c" s8 v& {首先新建一个浮点变量,下一步公开给外部可编辑(眼睛图标),然后用变量控制速度-在场景的实例中修改速度(需要先保存编译),最后实现不同转速:% U8 p$ l. _2 O- o
$ T1 h. f: n) @& q0 q; I 7 M, h; ]) j, k4 \0 h% }! O' M
7、材质
- U/ c3 O% \( S! T+ L1 k& ~7 _& ?4 O1 m) \
现在金币已经能旋转了,接下来我们让他更像金币一点吧
/ P. S4 _2 f! K! C8 U- R1 N0 ?新建材质 - 设置基础数值 - 按住数字键(1/2/3) - 点击鼠标左键 - 可以快速创建常量 - 配置金币的材质:. ~/ s4 ]# w( u7 s% e) \4 ^2 C$ T
* o; t& ^8 f5 I! Y: O
* W5 m& L; X: b. l: u. d* I2 Y+ i' t
支线:101材质创建与材质编辑器_哔哩哔哩_bilibili;UE5入门教程-12.QuixelBridge简介_哔哩哔哩_bilibili 8、一点装饰1 J3 g: B6 f2 x4 C4 B
5 O# N2 `% s; ?
增加文本渲染组件,修改文字、大小,修改视图和吸附\移动到合适位置
6 D8 v/ m- O, v- X2 l: o8 W
9 z7 l: J+ N' W# c3 N3 Y
6 D+ H+ I1 Q7 ~: bhttps://www.zhihu.com/video/16694204538347397128 H4 e: f& w. w8 a
添加点光源组件,调整参数,增加光照:7 v6 u1 H; _9 U% F& q1 w+ G
9 z3 F( v& U: @$ T. i1 Y0 N& q! U
0 U5 }" E8 {9 y3 W5 {) [4 V# S( v支线:
! m( c' E- c4 s2 ~- w+ H7 ^UE5入门教程-13.点光源_哔哩哔哩_bilibili) Y9 h" P5 w6 j P3 w4 B- y
UE5入门教程-14.聚光源_哔哩哔哩_bilibili
+ W! j' u0 n y( kUE5入门教程-15.矩形光源_哔哩哔哩_bilibili 9、组件层级
# N4 {; t. K3 J+ U1 [9 A
- [7 ` k* z2 M再运行一下,你会发现坏了,装饰和灯光没有跟着转(当然如果你没坏先接着往下看,试试看怎么搞坏)
5 A; l/ R' H7 n. U: E5 H$ i) W+ S2 h v* y( o- [. t! B* G( k
" |' Q8 Y& w" h* ~
原因是我们蓝图只旋转了Coin
9 O6 v; g: @/ @! p+ _- f7 }3 x5 r% d+ z1 z$ ?2 K
0 w& z8 w6 {/ P+ S. _/ L$ v4 Y
我知道你很急,但你先别急。- L9 |) _3 _4 A3 `+ k4 P% ]
方案1:把其他物体拖入Coin的子物体 l: @0 a7 z4 O* G7 a
3 ^/ L6 U6 b' s$ `& H/ w

) c9 Q) P0 x4 p% |方案2:直接旋转Actor本身4 D8 m( E6 y/ T6 c& r
, N* [+ {; j! y9 i; G; H: U - I$ j* K( ^, j g6 p' ~" {5 B
问题和方案都很简单,但是牵涉到UE的组件层级问题,这里有一些门槛,结合自己做的这个Coin理解一下 o5 a8 U5 u3 m- A6 \
! w5 j, M3 R5 j" j; y+ v- m& v
0 n3 Q6 E( i' Z) G支线:《InsideUE4》GamePlay架构(一)Actor和Component - 知乎 (zhihu.com)
8 l' h0 `, y8 q2 T9 V/ c/ Y
% @/ |0 [4 H6 q4 A# S6 W: U4 m# f+ f0 D9 n3 a* l/ D
怎么知道是不是 SceneComponent?
' o5 Q! Y0 t* G/ a x. U/ i) ?5 |" Z: x5 s* T( m! p1 \% s
10、移动. u7 l( _; Q- |- a
. M; ` v0 L. j/ S* U' X
解决了旋转的问题,那么移动呢?可以试着首先可以理解一下本地坐标 和 世界坐标的概念+ w5 A/ P. w/ ^% l! F' z

7 M. {, P! h A! x" q. H) a7 t! z8 I
https://www.zhihu.com/video/1669756252157726720
( P0 n4 R- d9 Q5 x7 G6 u" I! a4 X/ O0 v; c' {! v
' O1 l3 E( s4 K6 o# Y# c
如果感觉不好理解,可以关闭金币旋转速度,在场景里初始旋转一个角度试试看
& u* o) j7 y! E% h B8 }# e那么,如果我想要沿复杂的路径移动呢?
. j: I0 |# a! L$ @7 \) j) H! w, y听上去就是个很复杂的需求,所以接下来的蓝图会复杂亿点,准备好!7 q: P, P1 i) V" `3 C
既然要复杂路径移动,我们先画一条线吧,然后添加Spline组件,按住Alt+鼠标左键拖动,可以新增点(注意拖动的箭头保证路径在同一平面),勾选闭合循环形成环线。9 m6 W4 Z- D& {2 @( d- ^$ [6 ~8 j

9 G* t9 q3 U" Q& H2 A- H1 G1 Z2 t. Y7 f/ B3 \' [4 z. [5 g& d5 `/ _# t( ^
https://www.zhihu.com/video/1669768294973407232- ~5 w! ]; A$ Q/ m
" w" t! |! F- Q# L4 w/ ]
7 o, I. v' b" _有了线我们应该要怎么用呢?
. D. Z9 K6 a: ]/ @如果不知道函数有什么用?返回值是什么?可以尝试Print或者Draw Debug把结果可视化,多多尝试,通过尝试可以发现,我们可以通过Distance获得曲线的坐标# [$ R* _: L. x2 ^
- w7 [; N' ? G5 F8 C$ x4 g; ?
0 }: H6 m4 E V% Zhttps://www.zhihu.com/video/16697569526860963849 s$ j; L' A7 o, V$ b5 \
如果试着让Distance随时间增加呢?
( `) U9 a, o; n6 u& a% C5 I0 F& j. W* p1 H
: Z( Z9 v* X, R* B* l# j! z
5 F* }* \6 W9 J6 j7 a* ^% y6 L1 |) ]& a
3 G) R; ~, \4 p* p" ]- H, V
这里用了一个Distance变量,用于累计之前走过的距离。注意!这个Distance是没有公开的,对比之前公开的旋转速度,理解一下什么情况下需要公开变量。
; |) S6 f) O6 K0 y& q& b8 Q5 {: E! D+ R9 f% R# l
/ d- h2 U% ~$ h' T8 ^% g1 w: b
这里遗留了一个问题,走完一圈就停下来了,那我们接着来看下一步怎么操作~
3 \' i8 h* E5 X, f7 h问题看上去解决了,但是好像又没有
, E' E% }5 m, C- R* a! U' P/ U% K$ B这里用到了if分支,Distance大于曲线长度时清零
: o1 s+ L H7 p) Z. I. q) E. H+ \, F/ i7 Y$ p1 ]( @
1 n) L3 [7 c$ X
整理一下现在的蓝图,现在只要让金币跟着曲线运动就好了
- o/ X3 R5 ]! C+ |1 p0 T: M+ o2 i) W2 W" Q8 Q4 l8 Q
* I/ O5 d2 Q2 E2 Q- ^& j) S但是又发现了个问题,金币到地下去了。
9 w2 k1 I5 `+ m/ o4 S) }2 G1 ]) k, L/ k, X$ L
. S4 d7 @$ j0 |" H
解决方案很简单,可以直接修改曲线位置,也可以给金币再套一个SceneComponent父物体(记得更换蓝图节点),自己试一下吧!% b9 Y& S/ _2 ^$ r* ~1 I2 `% g
& y \' t K4 i' x5 m2 }/ g) g
5 B7 J8 [# g1 r. d* s# J. a9 \支线:蓝图 – 组件移动6 x! t3 ~! ]' ~; a: s O0 g |
金币移动的问题解决了,但是如果我要做升降平台,之前那些蓝图还要再复制一遍吗?反思一下,是不是如果确定了曲线、速度、移动的物体这应该是一个通用功能?
3 u+ w7 R9 d9 |# w; ^% y这里创建了一个ActorComponent,可以复习一下之前的概念,主要是为了复用这一段移动逻辑,可以直接跳过这个视频看下一页的蓝图(注意变量命名一致)
2 _ b( m& { y4 [
1 k9 a! { Y3 Q1 Q
7 Y6 q1 `8 w% R6 w& ~7 Shttps://www.zhihu.com/video/1669764067953860608- {" C% w3 g' { Y0 C7 F
) S l: h% u* p/ W/ l1 Y
0 b8 F) k9 y* H0 H( f6 BTick 的逻辑有了,现在还需要一个初始化:! k3 ]1 |& h1 {* [9 w8 y6 {! @
告诉组件:让哪个物体,按哪条曲线,以什么速度运动,这里用到了自定义函数,就跟其他自带的蓝图函数一样,会传入参数,执行逻辑,返回参数,Sequence节点会按顺序执行(可以用来把从左到右很长的一段逻辑拆分)
' R* L$ }8 ~/ A, e0 ?1 g/ D) t
$ R9 p+ J7 c1 N1 ~2 I' D. w
& }% I$ B& D' h0 r# _
https://www.zhihu.com/video/1669768963805376512
W, S$ x8 ?' \5 d6 D# y& QMoveSpline的初始化函数:
2 d* m+ G' t- Q+ J( M l* V# H& M( y6 ?0 H! f
9 j& o. f, i; ?+ e7 p
MoveSpline组件挂上后会自动执行,Coin这里需要调用MoveSpline初始化设置运动路线与物体
. W- \ U2 a0 J2 r* A. u0 [
5 @ e* h4 [. [ 8 K" b7 p- {3 v* A, ]
可以尝试一下:
z, u9 j" M: i- V
! o! S! ^: j7 O& s S$ F U5 N- 扩展组件,提供开始、暂停、反向运动的功能?: `8 B. a' ]: b4 q8 V- z: F8 s+ t
- 用这个组件做一个升降梯?(复用AC_MoveSpline)3 w1 t9 }4 Y4 s; W7 R, F3 E2 J$ P
我们回到主线,回顾组件层级,再来理解一下这个概念
* R6 b! V) b4 p* J. K+ \' H$ {# }: f u. Z

/ h* H# W6 d3 {- @11、物理$ M3 c, \, ~ `5 _" D: y- k
9 @2 _' E+ d0 F: f. z先试着玩一下,会发现这个金币是会阻挡玩家的1 D0 `1 x4 G9 R3 [' W
5 I5 C- Y- x9 o) m8 B 4 \% e; O2 E( Q k0 p
在细节面板看到的这些参数,都是像刚才我们制作的组件参数一样,用来调整功能的,不妨动手试试看物理相关的参数有什么用?
$ e! |( q# f+ ~. o( o2 Y/ _9 X. O
- v( C" X' ^% d4 _' E0 l
& r4 l/ O/ V! Z& z2 H+ ]7 M
: M7 d c/ B* C2 {2 D! y$ [) z5 z
1 X8 ~7 `: A8 Y9 D9 r支线:
+ u+ j w% x( Kue5教程20:一节课了解碰撞预设_哔哩哔哩_bilibili* E/ H/ j P, {! |3 i" } P9 {
为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com)
# m0 J b0 D* v% X% x! F为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com) 12、Trigger$ k' _# D! G: k: a8 F- U- U z
) `' O# n7 n8 `& C3 a终于开始做吃金币了!我们预期金币应该不会阻挡玩家,玩家吃到金币后就会消失,先修改碰撞,让玩家穿过。; E' L0 j8 Y4 i# S+ w8 ` ]( m
( |! r- e) s( y0 p8 T1 ~( g+ z8 e
% y. k3 K8 b) J# W# w
再增加一个碰撞盒,当然,你也可以使用金币自身的碰撞,但是推荐渲染与逻辑分离。注意:碰撞盒也是一个SceneComponent,可以关注一下碰撞盒的物理配置。+ H% [; u" r+ e4 h
6 _; t- T9 { _. e# U+ L' b
6 g0 A+ l r) {1 L& E9 Nhttps://www.zhihu.com/video/1669766658750164993
0 m9 N2 ~6 A( i支线:: t9 H; `+ \# Y+ D+ N1 E
ue5教程20:一节课了解碰撞预设_哔哩哔哩_bilibili
$ t, t2 i- ~5 F1 Z为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com)2 |1 |& E* n. Y
虚幻引擎中的碰撞响应参考 | 虚幻引擎5.2文档 (unrealengine.com) 增加碰撞时的响应事件的监听,打印Log尝试一下,删除自己大功告成!
5 J+ f4 J+ I4 ]& r8 Y" N9 z由于直接Destroy Actor似乎不保证时序(还没有研究底层原理,测试结果是这样的,即:销毁物体时,还有物体相关的逻辑在运行,所以如果发生报错,可以通过这样的方式保证 销毁时所有当前帧的逻辑已经运行完成。: q1 x. Z! P+ Q: D
' [' B" B( v9 c8 l9 k: D
9 f6 t) c3 {8 M6 h0 Y; c2 O5 R6 b8 ~# V
, X3 e/ _2 G: K9 y# P, d% K13、粒子特效9 `: ?! j* P1 O. ^
. k2 u& l5 ]2 H* }# E吃金币当然需要一个明确的反馈,增加一个粒子特效看看!第一次运行需要等Shader编译& E1 ?5 l: z" }) p/ F- k
& ^( b. e X5 X9 ` U+ Q+ J6 E( n
3 o: F/ c: N' @- s# ~; E
https://www.zhihu.com/video/1669766766669545472 N$ A* q) ?1 S
( Y% B: A: b: l6 J: a; z0 Q
O# ?4 ~: k( |
支线:
' d/ U! v* y4 A01_Niagara粒子系统准备工作_哔哩哔哩_bilibili 六、结语) _. L: T" L2 l2 Z& A9 G1 c5 V
7 `: v5 O: ~( y* _7 M经过上面的一系列操作,我们做了一个金币的Actor,能够修改他的模型、材质,可以自定义他的旋转、移动,在角色碰撞时做出反馈。看上去金币已经很完善了,但是现在我们的角色还没有办法记录收集的金币,以及之前提到的关于角色的三个问题:
$ y3 [8 J1 z5 I$ v
4 f' h6 r- T# B7 {/ g- 为什么初始化的是这个角色?8 p- O3 e# U! }( @4 t- [
- 玩家的输入怎么处理,角色怎么动起来的?% `# Q: n# i+ ]8 o
- 角色的动画是怎么做的?
1 ~) ^* a5 G' G. K, v 这些问题,我们将在《手把手教你做游戏 | 从0-1入门虚幻引擎5(二)》第二章来和大家一起研究!
' n6 K% ]& s1 d<hr/>如果你觉得这个主题对你有帮助,欢迎关注和留言,我们将尽快更新第二章节! |