文章目录
- 一、项目创建
- 二、Actor
- 三、操作关卡对象(旋转、移动、缩放和坐标轴)
- 四、常用快捷键
- 五、运行游戏
- 六、蓝图介绍
- 七、蓝图节点
- 八、操作事件图表
- 九、变量、布尔类型、数值类型、数值运算
- 十、蓝图注释(功能注释)
- 十一、文本相关类型:命名、文本、字符串
- 十二、向量类型、运算
- 十三、旋转体类型
- 十四、变换类型
- 十五、通过变换操作关卡对象
- 十六、变量的算术和比较运算
- 十七、获取按键输入
- 十八、分支节点
- 十九、序列节点
- 二十、for循环、while循环 、DO N节点、DO ONCE节点、FLIP FLOR节点、MATE节点、Multigate节点
- 二十一、数组、获取数组元素、查找输入移除便利判断数组
- 二十二、修改关卡对象材质
- 二十三、案例及其场景介绍
- 二十四、设置启动关卡
- 二十五、蓝图类(Blueprint Class)、及创建可用于修改材质的蓝图类
- 二十六、创建第一人称视角
- 二十七、控制角色移动和旋转(同上)
- 二十八、创建枪蓝图
- 二十九、将枪创建到关卡中
- 三十、控制枪旋转
- 三十一、拾取枪
- 三十二、创建子弹蓝图
- 三十三、蓝图之间交互
- 三十四、实现射击功能
- 三十五、实现碰撞销毁
- 三十六、实现音效播放
- 三十七、实现射击动画播放
- 三十八、函数
- 三十九、函数的参数、返回值和纯函数
- 四十、自定义事件和函数的异同
- 四十一、函数局部变量
- 四十二、宏和宏库
- 四十三、时间轴节点
- 四十四、插值
- 四十五、自动门功能
- 四十六、将门的移动功能封装为事件
- 四十七、蓝图类和关卡蓝图交互
- 四十八、任务门功能
- 四十九、通过射击目标实现钥匙创建
- 五十、实现第一道门和第二道门的打开
- 五十一、完结小节
- 网址
https://www.bilibili.com/video/BV1KB4y1278E/?p=13&spm_id_from=pageDriver&vd_source=27ec8b3b09d2a66ceeb9dbe961a247d3
一、项目创建
1)准备流程(选择模板、开发语言、平台、质量等)
2)界面介绍
-
整体界面
-
区别
①视图面板
:用于设计关卡,可以在视图面板摆放、移动、旋转游戏对象,为了便于设计,占了引擎的大部区域
②大纲面板
:以名字显示视图区的游戏对象
③细节面板
:用于显示当前选中的对象的详细信息
④内容侧滑菜单
:为UE4的内容浏览器,用于显示当前项目中的内容(资源、蓝图、材质等),默认为隐藏状态,可通过快捷键:CTRL+空格建显示
二、Actor
1、所有可以被放入关卡(Level)的对象都是Actor
2、创建Actor的方式:
①从放置Actor中添加
②从内容浏览器中添加
三、操作关卡对象(旋转、移动、缩放和坐标轴)
-
备注
第一个图标是选中 -
其他工具
1、移动工具
2、旋转工具
3、缩放工具
4、坐标轴
y:左右
x:前后
z:上下
四、常用快捷键
-
1)想要近距离观察一个obj,举例图中的cube(快速
双击鼠标
聚焦,选中cube按F
也是能快速定位)
-
2)按住
鼠标中键
则可左右或上下移动视角
-
3)缩放快捷键
①滑动鼠标滚轮
②按住alt键盘+鼠标右键
-
4)旋转查看obj
alt+鼠标左键
-
5)克隆游戏对象
选中要克隆的对象,按住alt键,拖动任意轴实现拖动 -
6)下落到地面
选中游戏对象,按END -
7)漫游(随意变换视角)
按住鼠标右键+WASD
五、运行游戏
点击播放按钮
六、蓝图介绍
-
定义
可视化编程方式,用于创建新类型的Actor和关卡脚本事件,方便开发者快速创建和迭代游戏,不需要代码 -
蓝图分类
1)关卡蓝图:当前关卡的全局事件图
2)蓝图类:允许创建这轻松基于现有游戏性类添加功能的资源
3)数据蓝图:仅仅包含代码(以节点图表的形式)、变量及从父类继承的组件的类的蓝图
4)蓝图接口:是一个函数或多个函数的集合,蓝图接口可以添加其他蓝图中,简单理解,蓝图接口允许不同的蓝图类彼此之间共享及发送数据
5)蓝图宏库:一个容器,包含一组宏或自包含的图标,这些图表可以作为节点放置在其他蓝图中。可以节省事件,因为他们可以存储常用的节点序列,包括执行和数据传输所需的输入和输出 -
创建蓝图
①蓝图类
需要创建
②关卡蓝图
是每个关卡都有的,不需要额外创建
,直接就可以打开
③蓝图编辑好后需要编译
后才能生效,还要记得保存
④新建变量
七、蓝图节点
- 蓝图节点类型
1)事件节点
:自己创建的事件,自己去触发和调用的节点
2)功能节点
:也算是功能,执行旋转移动等
3)变量节点
:自己创建的变量,需要设置变量或设置变量的值的节点
4)引用节点
:例如选中场景中的角色放到蓝图里面来 - 蓝图结构的简单介绍
八、操作事件图表
- 快捷键
①按住ctrl加鼠标滚轮放大
②可以按住鼠标滚轮缩小
③CTRL+D复制节点 - 添加图标
右键添加图标
- 举例创建(下面蓝图类是用的比较多的事件)
1)事件开始运行(Event BeginPlay)
项目运行起来只执行一次的事件
2)事件Tick(Event Tick)
每帧判断是否执行,Delta Second为间隔的时间
3)打印字符串(仅开发调试用)
这里点击运行就出现字符串
九、变量、布尔类型、数值类型、数值运算
1)布尔值
①多一个节点是将布尔值转为字符串
②总体流程是打印字符串
2)数值类型
①字节Byte
②整数Integer
③64位整数 Integer64
④浮点float
3)数值类型变量运算
-
目的:
numa和numb相加,赋值给sum -
蓝图
-
操作流程
①按住CTRL将numa和numb拖出来
②按住ALT键把sum键拖出来
③随便哪里右键搜索+号(这样数据类型就不确定)
④那么总体流程
- 补充举例(给数值numb加上50)
4)额外补充(注释)
选中整片蓝图区域,按住C键就能注释
5)断开某条蓝图连线(ALT键+鼠标左键)
十、蓝图注释(功能注释)
选中蓝图然后按住C键
- 额外选择
可以修改注释的颜色等
- 可缩放气泡
十一、文本相关类型:命名、文本、字符串
1)文本类型的变量类型划分:
①命名
Name:轻量级字符串,经常用于对象的命名
②文本
Text:如果游戏中出现大段对话,基本就用Text,对于本地化非常有帮助
③字符串
string:常用文本类型,支持字符串拼接
十二、向量类型、运算
1)向量的定义
向量是指有方向、长度的数据,值由三个数字构成(x,y,z),用于表示位置、旋转、缩放等
2)反向输入向量值
SET连出右键出创建向量,左边定义的Myfloat可用于输入浮点值
2)向量的运算
- 向量相加运算
- 向量相乘运算
十三、旋转体类型
- 定义介绍
同向量也有x\y\z,不过不一样的是:
①设置x:绕x轴旋转(Roll);
②设置y:绕y轴旋转(Pitch);
③设置z:绕z轴旋转(Yaw)。
十四、变换类型
1)变换的定义
变换是结合了位移、旋转、缩放的数据集,通常用于同时获取游戏对象的位置(x,y,z),旋转Rotation(x,y,z),缩放Scale(x,y,z)等数据
2)界面展示
十五、通过变换操作关卡对象
1)选中关卡对象
按住ALT键盘拖出来,拖出来是默认选中这个方块的
2)在关卡蓝图中右键创建选中对象实例
①切换关卡蓝图界面
②右键创建队SM_Cube14的引用
3)设置位置、旋转、缩放
①方块添加世界变换
②添加变换(让物体沿X方向位移500)
③额外设置
十六、变量的算术和比较运算
1)变量的算数运算
基本同上的操作不变
2)变量的比较运算(比较运算结果为布尔,因为比较只有两种结果)
①大于
②小于
③大于等于
④小于等于
⑤等于
⑥不等于
右键输入选中>
整体流程
- 特殊注意
1)字符串比较用eq
2)字符串不相等就是Not Equal(!==)
十七、获取按键输入
1)获取键盘按键的输入
①右键输入:
键 A
键 W
出现
②打印输出(CTRL+D赋值打印框)
2)获取鼠标按键的输入
右键输入鼠标左键
十八、分支节点
1)分支节点介绍
分支节点(Branch):用于判断条件是否满足,如果条件为true,执行true输出节点的逻辑,如果条件为false,执行false节点的逻辑
2)蓝图介绍
- 举例使用(age是整数)
十九、序列节点
1)序列节点介绍
作用:将一个长的顺序执行代码划分成段,更便于管理,让结构更加清晰明了
注意:序列节点是单线程的,分段会按照引脚(pin)的顺序执行
- 序列节点效果展示(下面的看起来更清晰)
2)使用举例
按下鼠标左键,先输出序列1,后输出序列2
二十、for循环、while循环 、DO N节点、DO ONCE节点、FLIP FLOR节点、MATE节点、Multigate节点
1)FOR循环节点
(1)ForLoop节点
- 定义
执行指定次数的功能节点,需要传入循环开始值和结束值
(2)ForLoopWithBreak节点
-
定义
在没有执行break时,与ForLoop节点功能一样,当执行break时,循环终止 -
举例使用
(index>3那么就break中断for循环)
2)whileLoop循环节点
- 举例使用
3)Do N节点
- 定义
当执行N次后,功能不再执行。若想再执行,需要执行一次Reset
- 注意
1)第一次进的时候是进Enter节点
2)Exit是输出节点,输出N次 - 使用举例(点一次输出一个数字,从1输出到5,右键重置才能再输出)
4)DO Once节点
- 定义
只执行一次,要想再执行需要执行Reset
- 注意
start Closed勾选后,默认一开始就需要Reset才能执行该节点 - 使用举例
5)Flip Flop翻转节点
- 定义
可以输出两个功能,第一次执行A功能,第二次执行B功能,第三次再次执行A功能,以此类推
- 使用举例
蓝图效果:交叉打印执行A功能和执行B功能
6)Gate节点
-
定义
又称门节点,当门打开时,随时可以执行功能,当门被关闭后,就不能执行功能
-
接口解释
1)Toggle:若当前状态是打开,则转为关闭;若当前状态是关闭,则改变为打开状态
2)Start Closed :勾选后:门默认情况下是关闭的,需要执行一次打开门才会打开 -
使用举例
默认门是打开的,点击鼠标左键,打印门是打开的,走Enter的逻辑;再按鼠标右键则把门关闭,这时候Enter不了,打印不出东西,需要按鼠标中键Open一下,才能鼠标左键ENter并打印东西
7)MultiGate节点
- 定义介绍
默认情况下会依次执行出输出,当所有输出完成后,不再执行输出。输出节点可以添加,还可以循环与随机
- 使用介绍
①简单输出两次,分别点击鼠标左键输出两次,第一次输出Out0,第二次输出Out1
②只有reset后才会再依次输出Out0和Out1
③Is Random是随机选择输出,选择过的不再选择
④Loop:当第一次选择Out1输出后,顺序执行Out2,Out0
⑤Start Index为1时,先输出Out1,后输出Out2,最后输出Out0
二十一、数组、获取数组元素、查找输入移除便利判断数组
1)数组介绍
- 蓝图定义数组
- 添加数组元素
2)数组元素获取(通过数组下标访问数组元素)
- 使用举例
3)查找数组指定元素下标(FindItem),返回的是元素的下标
4)获取数组长度(Length)
5)获取数组最后一个元素下标(lastindex)
6)插入数组元素
7)移除元素
8)判断数组中是否存在指定元素
9)数组的遍历
(1)数组遍历的方式:
①For Each Loop:
②For Each Loop With Break:
- 使用举例(遍历打印字符串)
- 找到老李就break
二十二、修改关卡对象材质
1)选中关卡对象,创建数组,并将数组提升为变量
①场景中创建四个蓝色Cube
②选中创建为关卡对象
③创建数组(利用创建数组节点)
④返回数组充当变量
2)创建材质和材质实例
①右键新建文件夹Materials用于管理材质
②文件夹里面右键创建材质
双击打开,并按住3点开,把黑框和右边基础颜色连接上
可以点击框内选择白色
修改材质名字,方便修改,右键选择转换为参数
③右键创建材质实例
并设置新材质的颜色,勾选Color并选择红色且保存
这样设置四个新的材质
3)创建材质数组(colorArray)
4)在材质数组中持有材质实例
在内容浏览器中选中材质
5)当按下鼠标左键的时候,遍历关卡对象数组,实出材质的随机赋值
- 注意
这里随机数组,可能会随机到一样的元素,也就是颜色一样的材质
- 效果
二十三、案例及其场景介绍
1)第一人称射击游戏(案例设计分析)
1、角色蓝图创建
2、角色蓝图移动功能实现
3、枪蓝图创建
4、枪的拾取
5、实现射击
6、播放音效
2)涉及到的知识点
1、蓝图类的创建
2、移动、旋转、碰撞、动态创建蓝图类、销毁等功能点
3、自定义事件
4、函数
3)从文件夹加载项目
- 项目资料链接
链接:https://pan.baidu.com/s/1lP8TopoW8_JRkOgszYnWIQ
提取码:33h6
①下载好资源后,加载资源
然后就可以第一次打开项目场景Demonstration,因为是第一次打开,需要编译着色器就比较慢和卡
二十四、设置启动关卡
①在自己项目中创建个Map地图,把第三方项目的地图搬到新创的Map文件夹,并命名为Main_Level(主关卡)
②设置关卡为启动关卡:
编辑->项目设置->项目->地图和模式,设置默认地图为Main_Level,然后重开下项目
二十五、蓝图类(Blueprint Class)、及创建可用于修改材质的蓝图类
1)蓝图类介绍
- 定义:
①蓝图类:允许开发者轻松地基于现有游戏类添加功能的资源。根据功能可以分为多个种类。
②创建蓝图类:由于蓝图属于资源,所以在内容浏览窗口创建名为Blueprints文件夹,用于管理所有的蓝图类。创建蓝图类需要选择对应的父类
2)实际创建蓝图类
①创建蓝图类文件夹
②创建一个以Actor为父类的蓝图类,命名叫Test_BP
1)视口:展示蓝图类模样
2)事件图表:蓝图类的逻辑
3)创建一个可用于修改材质的蓝图类
- 流程:
①第一步:创建蓝图类
根据actor创建蓝图类,命名为ColorObject_BP,并双击蓝图类打开组件
添加后得选择一个静态网格体
②第二步:添加静态网格组件(同上)
③第三步:定义一个材质实例数组,可以结节面板上展示
先创建一个材质实例数组,选中可编辑实例
(让这个实例的材质选择可显示编辑面板上)
直接把材质拖过去
④第四步:在开始事件,随机一个材质给静态网格组件
在事件图表
里面设置静态网格体的材质,也就是写逻辑
- 备注:
由于这里看不到静态网格物体,需要调整一下玩家出生点,设置第三人称视角
选择pawn类
二十六、创建第一人称视角
1)导入第一人称案例资源(需要导入第一人称功能包)
①添加功能
②选择第一人称的pawn
2)创建一个角色控制器蓝图
①blueprints下面创建一个角色(蓝图类)
②基于角色
3)添加摄像机组件
①选择胶囊体添加摄像机组件
②摄像机重命名为FirstPersonCamera
③挪动摄像机到合适的位置
4)在摄像机下添加一个骨骼网络组件,将第一人称角色的模型赋值给骨骼网络体,选择动画蓝图
①先选中摄像机
②添加骨骼网格体组件
5)调整位置(需要导入动画蓝图才能播放持枪的动画)
拖动到合适位置
6)让关卡默认创建我们的角色
(1)添加移动输入节点(设置角色在指定移动方向移动)
①简单介绍
②增加具体移动事件
③完整蓝图展示
绿线:正1和负1都能捕捉
黄线:前向和往后移动都能返回值
红框:捕捉移动事件
④左右移动事件
⑤鼠标左右移动事件
⑥鼠标上下移动事件
⑦注意
:由于旋转的时候,摄像机不跟随pawn旋转,所以得勾选
(2)获取actor向前方向节点(可以获取角色向前方向)
(3)获取actor向右方向节点(可以获取角色向右方向)
(4)添加空气之yaw输入(可以设置角色在z轴的旋转)
(5)添加控制器pitch输入节点(可以设置角色在y轴的旋转)
(6)MoveForward用于获取WS键按下事件、MoveRight用于获取AD键按下事件、TrunRight/Left用于获取鼠标移动x轴事件、LookUP/Down用于获取鼠标移动Y轴事件
二十七、控制角色移动和旋转(同上)
二十八、创建枪蓝图
1)创建一个Actor蓝图
①Blueprints创建蓝图类,命名为Gun_BP,类型是Actor
2)枪蓝图类添加骨骼网格体组件(不是静态网格体,因为需要改变位置)
①添加骨骼网络体组件
②设置为根节点(选中SkeletalMesh拖到根节点位置处就行)
3)选择枪模型
4)将骨骼网格体设置为蓝图的根组件
5)在骨骼网格体下创建一个球形碰撞器
①创建球形碰撞器
②整体缩放1.2并调整枪体位置
二十九、将枪创建到关卡中
1)在关卡中添加一个空Actor,用于标识位置
①创建空Actor
②打开关卡蓝图
2)在关卡蓝图中持有枪的创建点
①修改关卡蓝图
②完善关卡蓝图
③设置关卡蓝图旋转90度
3)在关卡蓝图的事件开始运转事件中,通过从类生成Actor节点,创建枪
①创建点光源组件
②点光源蓝图类Actor加入绑定事件
三十、控制枪旋转
1)在事件图标中实现实时旋转
①控制物品绕z轴,每一帧转两度
2)修改创建点灯光
①修改点光源为聚光源SpotLight,并修改绕y轴旋转负90度,角度为30度
三十一、拾取枪
1)当角色碰撞到枪后,会触发事件Actor开始重叠事件,在事件中可以拿到与当前对象发生碰撞的那个Actor
①在GUN_BP的事件图表里面,只要Player_BP一碰到GUN_BP就会触发这个事件
(也就是人物捡到枪)
2)OtherActor只是Actor这个类型,我们要拿到Player_BP这个类型就需要强制类型转换,要通过:类型转换为Player_BP这个节点来转换
(设置枪的手臂持枪点,并对齐到目标
,这里的持枪点提前做好了,这里持枪点不是重点,主要是查看骨骼看选持枪点)
3)再通过将Actor附加组件节点(枪拿到手就不旋转)
三十二、创建子弹蓝图
1)要实现射击就需要动态创建子弹
①创建Actor蓝图类
2)添加静态网格组件
①创建静态网格体
②添加球体为静态网格体
3)字段射击后自己飞出去,所以需要添加发射物移动组件。配置子弹的飞行速度及重力
①添加发射物移动组件
②修改抛射物参数