手把手教你做游戏 | 从0-1入门虚幻引擎5(一)

[复制链接]
查看7846 | 回复5 | 2023-8-2 10:39:14 | 显示全部楼层 |阅读模式
教程开始前,我们先回答一个问题:为什么要学UE?% S% v* S: Y1 j& e* U
全球最开放,最先进的实时3D创造工具
这是UE官方的回答,但或许对于初学者而言,在享受UE开源、技术、管线等各方面的优势之前,最大的焦虑可能是,这么NB的引擎,一定很难学吧?当然,如果你想深入研究UE,必然会有很高的学习门槛。如果仅仅是想要利用UE享受创作的快乐,其实很简单。
) P3 ]9 P7 E2 S/ \不积跬步无以至千里,让我们跟着教程一起来实现一个小游戏吧!这也许就是你成为UE5大佬的第一步呢?
, B8 s, ~8 D4 V: G- X) _下面就可以对号入座,看看你是不是我们教程的目标用户:
9 j5 r# J" H5 P
    # f! Z' k2 v+ ^% t9 F( n" Q6 c
  • 我完全没有任何经验,但是想要尝试自己做游戏;(教程中部分内容会与Unity对比方便理解,如果没有接触过也不影响学习)/ ^8 B# v% y3 f5 e7 y0 `+ l
  • 我有一定的编程\Unity基础,想要学习UE但是不知道从何入手;
    2 s5 I3 p/ w# ?7 o. Y3 M$ p1 s
  • 我会用UE做美术效果,但是不知道怎么上手蓝图\逻辑开发;
    - [5 i! h: |+ e9 B/ p
  • 我会一点UE蓝图,但是用的不太好,想要更多资料学习(可以重点关注支线部分,整合一些入门\进阶的教程)% w2 T; D. t& X6 b% ?: k
如果你符合以上的任意一项,那恭喜你我们是志同道合的朋友,欢迎继续看下去吧!, X$ q' A; b& o0 ~. _1 ]) o) Y
<hr/>零、课程概述2 N6 Z  c5 V+ h! m8 r" s; e

3 Z. J4 F1 x! c2 `& P目前,在网上已经能找到各种各样优秀的UE5教程,无论是入门,理论,还是方向专精,甚至官方文档和案例,都已经有丰富的学习资料可以参考。
5 p& D" r0 j+ q8 X笔者也是站在巨人的肩膀上,学习了数月才大致对庞大的UE有一个粗浅的了解,在这样的背景下,重复造一个教程的轮子毫无意义而且浪费时间。但是,在最初的学习过程中,经常陷入:“这是什么?他跑起来了但是为什么?我为什么要这样操作?我应该干什么?我还能干什么?”
9 `% s& R0 D- i. f; t5 M1 ]那么本教程的核心设计思想也是围绕这些问题展开:
3 @+ w2 r9 z8 Z7 {+ `1、主线支线分配:主线部分主要讲核心流程,碰到一些可以拓展深入的部分,或者能深入了解的理论知识点会放在支线部分,保证主线清晰,能够覆盖各个方面,支线提供更多学习内容,更有针对性。
$ T; A# Q$ m# `5 d- P' b  o* C2、理论实践结合:UE除了基础功能,也有一套自带的Gameplay框架,所以在使用的过程中需要遵循一定的设计才能用的更好。在本教程中也会尽量从不同角度去解释这些问题。
) A& a9 ~2 |0 z5 g% f8 z3、简洁+正反馈:简化案例,明确每一步的操作方法和操作目的,减少噪音,尽量保证每一个操作都能在引擎里看到效果。/ r- V8 d. ]: s+ ~/ s4 j
4、授之以渔:在前半段完成基础操作教学,做出简单功能以后,逐渐减少手把手文档式教学内容,提供常见的思路与方案(Debug、测试、实现),尝试自己解决问题。1 l& `: y5 V2 Z0 y+ G
如果你想要做酷炫的渲染效果,或者已经了解UE的基本功能,想要进阶学习C++;尤想要学习AI\动画等进阶功能,本文可能不太适合同学继续阅读~
/ a1 q- }0 t( D% P" `; L
+ o2 W7 i1 |" ?# n2 V# l

( |. c) p: F  `7 e+ R教程大纲! W: a, H& q: I) Z* I7 d: Q. m9 _
* [# r; i" S* m$ O
<hr/>下面,让我们一起进入正式的课程吧!0 Z$ [5 ?. G8 S! ?9 f2 B$ C/ w
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-2.jpg ; \# e/ u1 U9 r9 U+ i( t; D8 _2 z# C
先来看一段完整的成品展示
" j( j% Z: O- P& `' [2 X0 _% Z# Bhttps://www.zhihu.com/video/1669414768946388992: Q. P3 i( Y5 h. g4 L

7 Q+ w2 S( a. H# A; Q. J第一篇章教学内容,共分为5大部分:
1 B8 R& j, M7 S7 Q

    4 U  t  X6 D- H+ X3 T* p
  • 基本操作- ^( w( m( N7 M& r* Q; c9 {
  • 模块概览
    / ~/ t& w' M3 c2 \- Q0 L8 b3 t% h
  • 蓝图基础功能
    & [1 F" i5 c/ ^+ l( j( H+ W
  • 测试与Debug技巧3 u4 d! M; l% |: J8 ~
  • 举一反三实现简单玩法
    $ r7 r  t7 g) P" K4 `; U) [7 d
一、准备工作
7 C( W! b" J  u( l
5 l/ C* b' [5 P. n主线:+ e8 x. \* ^4 L1 B& y
1、创建账号
- y5 h# w, ?. a3 C" o2 ^  w3 q8 E' i! c# J/ ^5 P1 E* W: ]0 y. I
工欲利其事,必先利其器:第一步我们先把账号注册好
. D1 G: g. H' w( c- Z% A

    - W9 d  `! R4 ~' L* m% z
  • 安装Epic Game Launcher(Download Unreal Engine)( ~7 s0 g. N: X, C$ e
  • 注册+登录账号(注册 Epic Games 账户 | Epic Games (unrealengine.com))
    - `' V8 i7 {& N" c: @
  • 安装引擎详细文档(安装虚幻引擎 | 虚幻引擎5.2文档 (unrealengine.com))$ }& a0 Q; E2 E9 Q, i5 r8 l6 q, p
( `. X4 d$ |: ~8 Q# b! x$ z
8 S3 U* O* t, D# I. E- o; y

; Z5 ~. p( j& M. L8 C; d3 e' ]" X' j8 N5 t" ^4 d  `" q
2、创建工程
; d+ I1 e- x7 t' t5 E8 c& a3 b
5 ]: i8 L/ j  x8 _# [1 l6 t
% e2 ]% f( L8 K+ V- h' f
$ N4 u; ?2 j, i7 e2 ^  A3、调整布局( Z1 \# g* c: P+ ?* m* ?
" H) X$ }5 ]! V
如果一不小心窗口搞乱了,可以参考如下图操作恢复:: z5 }$ t( y* Y4 B* O7 J
0 d8 T4 s9 V; P+ Z) b- Z# v2 g
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-6.jpg
8 j& H' \5 s0 v  y4 S( z引擎默认布局如下图:
' C* _' I, }  H. l9 J+ E) B) x; f
4 S1 H& [! G" X1 s4 L4 N
+ Q3 S6 t' _0 c2 D7 C
, w$ n& C* t3 M! ]  r如果不希望内容浏览器悬浮,可以点击上图中的锁定内容浏览器选项$ w$ S7 W  g0 N5 \/ R4 o/ m. u

* H/ J% b* k2 p主页面注释:) t; F9 ^% T  I
8 r0 g/ P- z4 n0 K1 `( b3 l
! U1 o% n) O5 U" t
参考教程:UE5入门教程-4.基本操作(移动、旋转、缩放)_哔哩哔哩_bilibili
支线:) k1 X+ P/ u1 C
为Unity开发者准备的虚幻引擎指南 | 虚幻引擎5.2文档 (unrealengine.com)
4、新建关卡
6 D6 b2 j5 |+ t/ ^2 g8 t3 N- C
( Y/ K. g6 v' q/ F  v在内容文件夹 - 右键 - 新建文件夹 - 双击打开8 }9 g3 L; X. f

2 j# h$ w2 S9 I2 ]* ~# m 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-9.jpg ) l8 X1 V! U2 ?; O# w. E- e
在Demo文件夹 - 右键 - 新建关卡 - 双击打开" K/ N0 e+ |. c4 O9 e7 e

1 N2 L$ r% j+ m9 q, A( U 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-10.jpg 1 I8 y  W# A) r3 ~4 f0 M
二、光照: P8 Y3 p3 j0 d5 w/ ?6 N0 E" H
% |7 b2 r/ ^+ n$ j5 j( ?. y
主线:2 k3 @4 r  z* r% n; F+ p
1、创建8 ^* X3 O+ a8 Z8 z6 w, D

7 B7 w; @4 F1 E& b! G- n" k窗口 — 环境光照混合器 — 全部创建出来9 H1 l4 ?2 G' y% q9 I: X
3 r2 F7 S0 z2 S
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-11.jpg
' ^# T* ]5 C2 I, |6 B下一步:+ R2 ^5 y: M5 U$ W

* n  B) p7 K) Z% x( s$ B3 O 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-12.jpg
0 g$ W0 O1 Z. G. o6 @6 B支线
6 @% E3 M# X- L( A. `  e兴趣具体功能的可以看一下( c- a( b* v" |! W% l
虚幻引擎中的环境光源混合器 | 虚幻引擎5.1文档 (unrealengine.com)8 \6 v0 i8 j. \+ g$ i# X5 E
UE5入门教程-16.点亮场景_哔哩哔哩_bilibili
或者玩一玩这个插件:/ X9 B) s0 y  N- ~, a1 F9 h
UE5 超动态天空 Dynamic Sky | 自制教程 |难点解析 +使用心得|虚幻引擎_哔哩哔哩_bilibili9 d% s% a9 y( l; n
其他光源教学:s06-光照系统介绍_哔哩哔哩_bilibili
2、整理场景结构
& a/ m9 _/ n0 [$ |% g" H
8 H' _! H! K1 ~3 U0 u/ e/ a! Q$ z在大纲窗口 - 右键 - 新建文件夹 - 整理一下场景结构
9 J8 H# G# ?, A* R
" |# `* l; G) w8 D9 ]$ N& A! D+ Q3 A- B/ z1 M0 H6 l
三、地面
8 r6 r+ @4 c3 ^5 P6 ^
+ r; \! Q$ x% |- @# R主线:; O9 T5 j+ X2 l' p7 X
1、打开放置Actor面板,切换到形状
% F" d/ B8 f9 ]: y. |* ^
) e; J& W1 k0 k  f0 b1 R) j 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-14.jpg
/ h" \; V; ~  ]7 c6 X0 P* u下一步:
2 U5 I" y6 v7 p/ n
4 p# t& {7 W4 M; `) W2 ]$ i 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-15.jpg 1 s7 Y2 h  l0 s! U3 A0 K3 z
支线:% i/ G# j; r0 s' K, h% P5 S% |
现在已经可以放置简单的白模地形了,如果有兴趣可以了解一下UE的地编/建模:
2 Y7 _( x4 g$ W; W5 ?. F
UE5地编教程-1.课程简介_哔哩哔哩_bilibili
( y) N: ]; j$ J+ `UE5 Modeling 01: 造型工具 Shapes_哔哩哔哩_bilibili
四、初识角色
, |' Z, ?: j9 ]8 m" p' F
% ]9 F( ?6 T# ~0 r. {; b( J/ S6 C主线:& S( m  X3 ?6 Y
1、第一步:现在已经能在UE里面搭建基础的地形和光照了,运行游戏之后会发现角色出生在场景相机位置; f9 }, }/ [* l8 ]' \2 ~
( A" M5 [4 _4 U5 ?4 t* w' y2 v

& r; z7 k+ a3 n. W* x
- U$ {, @, p! n- Y 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-17.jpg 8 e- J! e! Q0 [! @9 H
2、在场景里放置一个玩家出生点,可以控制玩家的出生位置,再次运行可以看到角色出生在平面上了
, U! l) I$ D9 T/ V+ N- J
$ i" \( Y0 v# e2 C 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-18.jpg
7 i6 `' {0 t+ t8 ?% q$ U% r5 ?6 R6 r% R7 d. d( ^
(WASD + SPACE 控制)
# i& K* [1 m6 u8 T( V$ c: E# h5 s1 I1 ~# c
现在在游戏里已经有能控制的角色了,但是还有一些问题没有解释:) @. T( ~; t1 b2 @# J8 g6 u
    4 r  `: _$ ~8 U$ s, ]% s' s
  • 为什么初始化的是这个角色?% c" J3 u/ L1 h. B0 M
  • 玩家的输入怎么处理,角色怎么动起来的?
    7 D4 T+ V0 A& Y  w
  • 角色的动画是怎么做的?, I; m+ R4 F% ]8 Q8 d
我们先搁置这些问题,做一个简单的金币,如果你很感兴趣这些问题可以看一下支线。5 ~- j# l4 E9 L# |) G0 O, O7 |8 ]
支线:
8 m: q% N5 @5 J# \) P: w  x: _0 g
UE5自定义角色教程-1.课程简介_哔哩哔哩_bilibili
五、蓝图6 H) Z- W/ s& U& V# f; p
9 p0 Q( B! B! _/ l  ^$ L/ [
之前通过这个面板,我们可以拖一些简单的物体到场景里面,但是会有几个问题:2 j! Q: \% q. J; N, z; S, f8 f+ X

    ' Q6 ]4 q, h& N
  • 物体没办法定义自己的逻辑(运动、碰撞等等)6 E1 V6 u9 l0 v! e
  • 复杂的组合物体没法复用,每次都要重新组件蓝图类类似于 Unity 的 Prefab,能够将带有逻辑的复杂物体打包成模板,方便直接复用。
    ; n  d" R# s" R8 k( O5 R
4 ^7 }1 ?7 H- o" p( K4 w$ u8 M

; e% n0 O3 l0 k; E/ e1、创建
& P2 t) o2 o' C6 \
5 W9 R& @5 ]9 @- L) p: b右键新建蓝图类:# i  `( d- F4 w9 _; v

+ d9 \% C  n- |8 Y+ n; j 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-20.jpg 5 U8 i4 u% |9 z( F8 u% B
(2)选择Actor
* ?+ Y; C0 G7 W; P8 t8 [" y8 M/ i4 I( }

# q6 ~1 h3 [9 j
支线:蓝图接口、继承与多态 - 哔哩哔哩 (bilibili.com)
% s* c: h3 a' Q* i) K不建议现在看,第二章还会出现
(3)修改命名0 @! \- W, Q% J

( M8 Q: i$ m1 P3 ]5 S. U 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-22.jpg 0 [' c. D( q# Z$ B( r
支线:虚幻引擎项目中推荐的资产命名规范。 | 虚幻引擎5.2文档 (unrealengine.com)
2、模型
- f3 C. Q% b+ s! V& l3 _5 `8 b& ?
创建 金币模型(改名),并调整旋转、大小。
4 b! h* v5 m+ d3 J; M0 \/ L/ z* n) C* h. y. b' w) J
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-23.jpg * v* h. Y% g$ ]! i# d
! l* J. R2 |" F" C
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-24.jpg # o, p; h6 V  f3 q  M" Z
3、使用7 z3 l) l' E1 D6 N4 m% q
  X5 `" Y9 `* o" e4 B9 f1 f$ Q
尝试着拖进关卡,就能看到模型!- o% A; Z9 `% k7 W4 t! E
1 q1 W' ?3 G2 G& ~# W8 }
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-25.jpg
. m* {- @6 x9 S/ L& e4、Hello World# D& h  d0 l: R5 _* a/ X

' L7 j. |* d6 H: r+ e再次打开蓝图,点击事件图表,这是蓝图类的逻辑部分:5 ^8 S! Q! H  \
2 f, H' }/ V$ N+ q& ?( t9 Z8 r

: K. V$ B# i9 m' L8 @* ]那么,如何创建我们第一个Hello World:4 o' S  L6 ?! \' z/ v
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-27.jpg % ]7 t, }6 b& H8 E6 V+ K
6 N$ y3 c3 s9 C. P- f
https://www.zhihu.com/video/1669419167345168384
9 y) O, G, l# y4 C1 S
    / G' B' v% d  V( l. b8 u
  • 红色 的节点代表事件当xx发生时8 I$ L9 w; x, Z+ ^; I
  • 蓝色 的节点代表函数执行某一操作
    8 P3 ]# W1 c! j" w% T* H% X
  • 白色 的线代表逻辑执行顺序
    ) y* r. d2 Y& W" n% S
  • 绿色 的节点代表纯函数(计算)获取计算结果;( I, R/ k+ j: P2 A0 m8 i9 R
  • 其他颜色 的线代表数据传递
    0 {9 m! F* [3 O- k1 m# j2 U

/ V/ U, m6 w  S) b; S+ R- x% a9 G  m 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-28.jpg / E$ t9 q/ M4 f* {/ }. c. w  t
比较常用的事件有 Tick 和 Begin,Tick 在每一帧运行,Begin 在开始时运行;6 X/ f; q" {/ [( }. P& ^7 g2 V
删除Tick部分的逻辑,尝试打印自己的命名:
% q% x' |( O2 s# a6 j( [
7 J9 z% d9 M3 @
- V9 ^, {9 D3 Z$ k2 c快捷键:1 x5 m) [" @2 x7 N1 F, t5 J: v

    8 W+ H7 R) _) @* L9 @# u
  • Alt+鼠标左键 = 删除连线1 q. B) |3 r: T+ p. L) D! ~9 \, ?
  • Ctrl+鼠标左键 = 重新连线( c! w0 F+ Q$ g
  • 双击鼠标左键 = 改变连线路径
    7 _3 c3 k9 e" W' ]2 P2 P
  • C = 添加注释. h/ t% G2 E1 J/ n
支线:蓝图 – 节点这么多怎么办?
& Q$ l0 d" p( x, G$ z% X
Q:节点这么多我咋知道用哪个?
  z  O8 v  a/ q! xA:用多了就知道了
5 D/ w8 w" l/ p& A/ R6 nA:看你想做什么,Google/GPT/文档/直接搜,基本上都能有答案5 ^9 I6 I' P8 N
Q:搜索的时候有什么技巧吗?, S0 J0 L: J6 @
A:用多了就知道习惯性的命名,就能大概找到对应的节点
2 m# f) ~' s3 u% H) c0 bA:按住Alt能看见英文名,直接搜英文缩写就ok
' f: S+ o- f& A2 B5 f) kA:不同单词之间不用输入完整,用空格隔开也能搜到
3 y6 H& x7 t  T" k5 |  o$ N
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-30.jpg + M+ K# j- g4 ~  l
5、转起来
$ v0 `- d  a  w1 ^
+ s- d" z) q! j" i接下来,我们要让金币转起来* ^$ P  p5 G* X5 ~6 }9 p/ y

5 |2 j  v- [- R2 g/ _$ V 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-31.jpg
: }6 V1 J( u" y
3 P7 V4 C: N  J添加本地旋转( i* D; M) z, ]- T7 W6 h* E
# w1 w4 \" j% l; Z! z3 P
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-32.jpg : {. v- b" E7 t, B& J

( Y0 |& z2 P" w5 ?修改旋转X轴值- ~, r# S8 I# ~  e, ^

$ ^. ^0 ?0 v# G! D- G运行一下,金币开始转了!
! x" ?; F! V: w' a  n% [' ]2 b$ v, A+ T+ z7 |
/ V, u4 O4 Y& e
受到设备性能等因素影响,每次运行帧率可能不同,所以每一帧Tick的间隔有可能不同。如果每一帧都旋转固定的角度,可能会出现速度不均,所以一般我们都会把速度*每一帧的间隔时间,保证匀速旋转。
3 d( [1 K( `: q& @
" F) x" r! A5 p
: B7 C3 ~! p( a  s& a, o# @# E" t定时器:
4 ?% Q2 i' Y. _8 p# |2 L% kTime秒之后,调用一次Event函数,Looping决定是否每过Time秒都会触发。所以要新建一个Event承载需要运行的逻辑,然后在初始化的时候,让定时器周期调用。  a8 o1 ~. w0 Q6 |6 s  \  L) F
& s3 F& G8 {5 ^9 u+ l0 b
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-35.jpg
8 [2 t( W) o1 v. p8 P如果你想要每秒触发一次的事件,应该像这样去配置:) L; k& Z" H2 }
支线:UE4基础教程系列-P3 时间管理大师(Base)_哔哩哔哩_bilibili
6、参数
1 @& Y1 l' R0 f* n6 W6 H( D2 P* I* ^' O/ ~
现在我们已经会让金币转起来了,但是旋转速度是固定的,如果我们想让场景中的不同金币不同转速呢?2 R: U% U) P# \5 o$ q* q
2 ?; b2 z, g  Y8 ?* P. J" H
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-36.jpg
/ e) y8 V0 v# G* J; T* |: J) F. k首先新建一个浮点变量,下一步公开给外部可编辑(眼睛图标),然后用变量控制速度-在场景的实例中修改速度(需要先保存编译),最后实现不同转速7 k1 H) r# w9 ^
+ q0 L( y7 ]/ ~6 G" p
% o' l" V' w' v2 F
7、材质6 a% I" c7 k. b
9 N# M3 Q. N0 v% E9 w
现在金币已经能旋转了,接下来我们让他更像金币一点吧
" q! d# `# J2 c' E! s' Z0 S新建材质 - 设置基础数值 - 按住数字键(1/2/3) - 点击鼠标左键 - 可以快速创建常量 - 配置金币的材质:
; N" T1 D5 v! o0 _$ X6 A6 v& W
8 K6 z5 {) y6 ?" v; k
% R  l- R( P4 E4 l5 \
支线:101材质创建与材质编辑器_哔哩哔哩_bilibili;UE5入门教程-12.QuixelBridge简介_哔哩哔哩_bilibili
8、一点装饰$ D8 ?* n4 x4 Z1 F" e
# x2 J8 E/ n. _) w
增加文本渲染组件,修改文字、大小,修改视图和吸附\移动到合适位置
! F2 X, K. m  e0 g/ j8 L' k 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-39.jpg $ s4 |% J- N6 ?

. B/ W1 a0 v- E: M& w" K7 Jhttps://www.zhihu.com/video/1669420453834739712
: d+ {# G. X5 d8 D- Y; P  N添加点光源组件,调整参数,增加光照:4 L9 p; ?' R0 z; _1 H3 n3 A

. l# X# V& Q4 ^, S% ]% f& v* t$ E5 Z/ {7 R+ v4 ?7 q8 v  u
支线:, f3 \5 ~2 d5 V* {
UE5入门教程-13.点光源_哔哩哔哩_bilibili
, V# l& f  B. O4 kUE5入门教程-14.聚光源_哔哩哔哩_bilibili
2 O4 r2 R6 R$ b$ e; ~4 I4 w1 MUE5入门教程-15.矩形光源_哔哩哔哩_bilibili
9、组件层级4 o8 j. K' P: J1 D+ V$ a* ]2 A' s

! K- G5 {0 H* q2 O再运行一下,你会发现坏了,装饰和灯光没有跟着转(当然如果你没坏先接着往下看,试试看怎么搞坏)- n$ @) X4 ?1 p
, A) q7 h7 }! w2 P
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-41.jpg
; w# X, ^8 L+ K2 w& X: n原因是我们蓝图只旋转了Coin5 E; t: ]" N+ H

) Y/ e) x3 T8 W, M% S9 v) ~4 | 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-42.jpg 0 s& E- C7 D; T7 w4 V. e
我知道你很急,但你先别急。" V( j7 n" E1 n9 a) g. r- L& y
方案1:把其他物体拖入Coin的子物体
2 i6 h! G) |5 L6 V+ I6 [( y, o, {4 x' [; q
3 ^; |& ]  t& |" B
方案2:直接旋转Actor本身: M9 c0 _6 V2 Z' U7 a% ^
/ Q' G) i( A. T- M
8 u, ~+ }, H( f% @1 P' b
问题和方案都很简单,但是牵涉到UE的组件层级问题,这里有一些门槛,结合自己做的这个Coin理解一下
3 I4 x' E! C6 F' x  z, T" M  D
" F4 V  L( [# X1 |: t, p( A+ o7 W5 U 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-45.jpg + m+ y0 z% b8 ?2 \; O' F
支线:《InsideUE4》GamePlay架构(一)Actor和Component - 知乎 (zhihu.com)
3 ^. ?: q6 `# E; N
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-46.jpg 3 k! M7 M7 G5 i0 K+ w
2 }' [; c- D0 l: O! D# `
怎么知道是不是 SceneComponent?
: b. y+ o9 g7 G& J; U  C. S
$ v7 E9 x+ d( ^10、移动* `( S8 Y) p2 V* i9 a4 v$ c

- p6 v7 ^. y$ d: d4 b解决了旋转的问题,那么移动呢?可以试着首先可以理解一下本地坐标世界坐标的概念
+ ]- Z( u/ E* N+ Q* z& s3 x
" {, J. h6 x! i5 K( x! Y0 F
4 a8 n7 b- P" b7 n7 ]3 bhttps://www.zhihu.com/video/16697562521577267206 y0 Y! t' t! u
3 s& s( q' o- p* i+ f7 W1 A& _
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-48.jpg $ c& g1 H+ |7 [7 R( i
如果感觉不好理解,可以关闭金币旋转速度,在场景里初始旋转一个角度试试看" g% L+ B+ a0 V% c5 E
那么,如果我想要沿复杂的路径移动呢?
. m. d; _+ D7 a( C: P听上去就是个很复杂的需求,所以接下来的蓝图会复杂亿点,准备好!# \7 h" w, S+ V; m  K4 q& x
既然要复杂路径移动,我们先画一条线吧,然后添加Spline组件,按住Alt+鼠标左键拖动,可以新增点(注意拖动的箭头保证路径在同一平面),勾选闭合循环形成环线。# Q: G. n; ^* F1 t

  q4 i. J% h- U
6 |  g+ p7 v0 G% d  Vhttps://www.zhihu.com/video/1669768294973407232
8 B& U$ L: \* D, U* M0 Z. \
9 l; M# Z1 g$ ?" `1 n' g8 N 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-50.jpg . K# y6 x; [7 I. Z0 \5 L, W  f
有了线我们应该要怎么用呢?! D6 h- N5 v  F/ x% P0 O, l1 R8 M
如果不知道函数有什么用?返回值是什么?可以尝试Print或者Draw Debug把结果可视化,多多尝试,通过尝试可以发现,我们可以通过Distance获得曲线的坐标
5 \% v6 Z: J2 r. `6 a 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-51.jpg ( L2 d% _9 u; [5 H8 r
( R/ C2 K, S) h
https://www.zhihu.com/video/1669756952686096384
- r) w  U# u3 w3 {# \- ^如果试着让Distance随时间增加呢?
1 I* |1 e7 s$ C& w4 N) a1 n0 P' |; j! M" Q/ N6 n9 h  E7 ]
( ^' h) w- e( S/ n
2 T& n" `: Y/ j) a4 p

7 U; O! V7 R) T这里用了一个Distance变量,用于累计之前走过的距离。注意!这个Distance是没有公开的,对比之前公开的旋转速度,理解一下什么情况下需要公开变量。
9 L7 p/ x# m- `7 [" J
" ^) G* C* E6 V- ?; x( ^7 c' H' Y7 e
这里遗留了一个问题,走完一圈就停下来了,那我们接着来看下一步怎么操作~9 q* r/ G! t  r5 B; l' y) _
问题看上去解决了,但是好像又没有
% k; n6 @# c  ^* a1 X这里用到了if分支,Distance大于曲线长度时清零
  I+ F' {- t& p) b1 Z' o# s. T0 E! S7 {5 j/ I1 D- x0 Q

1 a5 r; x! ^6 q2 K9 j$ {% c+ g整理一下现在的蓝图,现在只要让金币跟着曲线运动就好了
% x% V$ C2 e8 d0 h- [' Q
: @1 u" a) S. m, [9 | 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-56.jpg
9 [' m! C% `1 i$ g" a$ b& S/ m' x, b但是又发现了个问题,金币到地下去了。
( u+ m6 [8 |8 g4 S# M+ w9 f2 r9 P
5 H% c( K+ g0 N- w7 j
解决方案很简单,可以直接修改曲线位置,也可以给金币再套一个SceneComponent父物体(记得更换蓝图节点),自己试一下吧!
( D( a" d1 O% t: ]0 K. A4 ?) |' V
8 C! b' V/ k8 ~* T7 } 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-58.jpg
0 A+ u. f3 a) e5 }5 z- I% Q支线:蓝图 – 组件移动* [+ _  _( Y) o, o, j1 P9 T. B
金币移动的问题解决了,但是如果我要做升降平台,之前那些蓝图还要再复制一遍吗?反思一下,是不是如果确定了曲线、速度、移动的物体这应该是一个通用功能?
8 r* [! r* S; `. s8 d这里创建了一个ActorComponent,可以复习一下之前的概念,主要是为了复用这一段移动逻辑,可以直接跳过这个视频看下一页的蓝图(注意变量命名一致)$ a& d! \! F2 b& s0 |; l
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-59.jpg
$ q! L/ Z7 B( [5 B3 j% M2 }& i8 A# S' I4 A% o7 Y
https://www.zhihu.com/video/1669764067953860608
! z$ v& F" |! z' f2 u
. G9 U9 `6 h5 Q$ z- z5 v! k3 R. W7 u5 A4 G" Y; N5 d4 v4 M9 O9 o. }/ j
Tick 的逻辑有了,现在还需要一个初始化:
; K  j( q6 k9 r& k1 u告诉组件:让哪个物体,按哪条曲线,以什么速度运动,这里用到了自定义函数,就跟其他自带的蓝图函数一样,会传入参数,执行逻辑,返回参数,Sequence节点会按顺序执行(可以用来把从左到右很长的一段逻辑拆分)
! A! c# s/ H! D, M' U3 z: G 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-61.jpg
+ r0 ]( ]9 _  i  J
; A* _, Y' r$ w% [https://www.zhihu.com/video/1669768963805376512$ s& R$ H1 V2 f1 P
MoveSpline的初始化函数:/ h: ]! x. ?  b( H' W$ {! A
+ b8 g$ L# E1 \* p/ d3 b5 z
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-62.jpg # F& M; ~* M) |' Z' v
MoveSpline组件挂上后会自动执行,Coin这里需要调用MoveSpline初始化设置运动路线与物体
) v" O3 G" p, w5 c! p( n/ x# J- v7 F8 B

* _$ R9 S6 Y9 }9 \可以尝试一下:& ?' u" n4 T# u' b
    - Q, `/ K& Y) ?, e
  • 扩展组件,提供开始、暂停、反向运动的功能?4 j" K1 o% G: M! z# S' m+ z) @, O
  • 用这个组件做一个升降梯?(复用AC_MoveSpline)
    % J7 s' m8 W6 ~& u7 f
我们回到主线,回顾组件层级,再来理解一下这个概念. g; T8 _+ z; V4 _6 x3 f( o0 G/ m

; a' P8 E" P) t
+ W: F4 }: A+ `1 p  s11、物理1 q, g! Q6 b( a% [9 n3 e, y5 B; \! D
. y, ^$ k) Z7 a3 r% X
先试着玩一下,会发现这个金币是会阻挡玩家的
5 Q- o; N5 `( n; Z( F
$ N, p5 m- H6 D. I) a6 ^& @* N$ b/ ]* i8 [9 k* S2 v9 Z
在细节面板看到的这些参数,都是像刚才我们制作的组件参数一样,用来调整功能的,不妨动手试试看物理相关的参数有什么用?* p7 j+ G% E' U% v6 Q. W3 k% q

3 J. c; ^' E$ d5 A 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-66.jpg
5 B: j0 M3 w4 Z, F& ?5 ?  f3 @6 F$ S( M% b: m  x
* U* e3 l8 {5 @% E
支线:
% e& o) I6 b0 }2 `; a
ue5教程20:一节课了解碰撞预设_哔哩哔哩_bilibili# k( c, f3 ~. A6 F7 z( p
为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com)* j5 v0 x5 a( i( K7 P7 Q
为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com)
12、Trigger, o9 S8 V5 J  l
2 A& c  J( A% M( R; g7 J
终于开始做吃金币了!我们预期金币应该不会阻挡玩家,玩家吃到金币后就会消失,先修改碰撞,让玩家穿过。7 T% q- H9 p) J3 P) `- w

0 g, Z6 u# O. E1 [+ I 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-68.jpg 9 w) y4 `" E3 [+ f4 @; c
再增加一个碰撞盒,当然,你也可以使用金币自身的碰撞,但是推荐渲染与逻辑分离。注意:碰撞盒也是一个SceneComponent,可以关注一下碰撞盒的物理配置。6 g& v' X9 [# N+ C- G- A
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-69.jpg 0 [+ s% ?: D# \/ N. b
# {% I2 X) \) f2 T! f  S
https://www.zhihu.com/video/1669766658750164993
" q+ W" B; ~, K  w  \+ X% b支线:
1 X2 J, ?2 C2 {- c% {
ue5教程20:一节课了解碰撞预设_哔哩哔哩_bilibili; ]" I; ^1 f# I# f2 H0 s
为项目添加自定义物体类型 | 虚幻引擎5.2文档 (unrealengine.com)
3 Z/ Z* M" E) n! F虚幻引擎中的碰撞响应参考 | 虚幻引擎5.2文档 (unrealengine.com)
增加碰撞时的响应事件的监听,打印Log尝试一下,删除自己大功告成!
; x, k+ X2 ~2 a9 s) Y6 W% [% o* V由于直接Destroy Actor似乎不保证时序(还没有研究底层原理,测试结果是这样的,即:销毁物体时,还有物体相关的逻辑在运行,所以如果发生报错,可以通过这样的方式保证 销毁时所有当前帧的逻辑已经运行完成。9 b- P: f$ v) S% s- e

" I6 |' h* W' k& q% D( i& g: t2 T' r* c9 s3 ^0 i0 K) v" L

- v3 p! j6 d9 \+ n$ Z- A# f 手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-71.jpg
. p8 i9 b' _) m13、粒子特效
3 q8 `1 W7 f! k$ {) ^2 B" _6 N9 a) H  b' q" _! H% M
吃金币当然需要一个明确的反馈,增加一个粒子特效看看!第一次运行需要等Shader编译
& x2 M9 E" [5 ^2 ^
& [0 T6 _0 q: z4 {6 E# t; E* P7 ]' K4 H( F
https://www.zhihu.com/video/1669766766669545472
6 }' o- y5 P8 L" K) L- M/ u: \8 P! c. l; C1 C7 T0 i5 C+ c$ j9 B
手把手教你做游戏 | 从0-1入门虚幻引擎5(一)-73.jpg 9 R8 L+ I" P# D0 J# R
支线:6 b  f; a/ ]0 Q1 _. l+ h. U
01_Niagara粒子系统准备工作_哔哩哔哩_bilibili
六、结语1 i: S8 i8 }2 S% ]; }' A
' V& L8 _0 O- N& e7 A8 a+ h( [
经过上面的一系列操作,我们做了一个金币的Actor,能够修改他的模型、材质,可以自定义他的旋转、移动,在角色碰撞时做出反馈。看上去金币已经很完善了,但是现在我们的角色还没有办法记录收集的金币,以及之前提到的关于角色的三个问题
! H& b4 y2 p$ ?# `- \
    0 {& [, s: f3 N. P% i
  • 为什么初始化的是这个角色?
    * R9 j. R, V. W. \& r  }
  • 玩家的输入怎么处理,角色怎么动起来的?" s$ X* K: r1 g) b3 K
  • 角色的动画是怎么做的?: s. w+ n4 @/ A6 G7 `; G
这些问题,我们将在《手把手教你做游戏 | 从0-1入门虚幻引擎5(二)》第二章来和大家一起研究!: y- _) g1 Z$ q1 }0 ?) E6 X% t
<hr/>如果你觉得这个主题对你有帮助,欢迎关注和留言,我们将尽快更新第二章节!
江南笑竹叛 | 2023-8-2 19:30:17 | 显示全部楼层
比撒哈拉沙漠还干的干货?
回复 支持 反对

使用道具 举报

江南笑竹叛 | 2023-8-3 01:52:53 | 显示全部楼层
尊嘟假嘟[爱]
回复 支持 反对

使用道具 举报

邓丽欣欣y | 2023-8-3 04:43:07 | 显示全部楼层
下一章什么时候放出来?
回复 支持 反对

使用道具 举报

文伟685 | 2023-8-3 12:37:16 | 显示全部楼层
六年前,曾经投过贵公司的特效岗位,被刷了,但是贵公司半天后就给发了短信,说明原因,这个行为非常棒,很尊重应聘人员;
回复 支持 反对

使用道具 举报

mbmfzux749996 | 2023-8-3 16:52:12 | 显示全部楼层
爆肝中!!!欢迎关注会推送给大家哦~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

280

金钱

0

收听

0

听众
性别

新手上路

金钱
280 元