赞
踩
蓝图是游戏的可视化脚本,使用节点图来达到每个实例特有的诸多目的;
最常用的是关卡蓝图和蓝图类;
关卡蓝图:每个关卡拥有各自的关卡蓝图,可在关卡中引用并操作actor,还可以与关卡中放置的蓝图类进行交互;不可以通过编辑器接口来创建关卡蓝图;关卡蓝图UI中没有组件选项卡;
蓝图类:创建可以复用的交互资源类型,必须包含所需脚本来进行交互;
蓝图类是一种允许内容创建者轻松实现基于现有游戏性类添加功能的资源,它会作为类被保存在内容包中,实际上,这些蓝图会被定义一种新类型的actor,可以放置到地图上;
创建蓝图需要指定该蓝图父类,常用父类有如下几个
Actor,可以在世界中摆放或生成的Actor
Pawn,可以从控制器获得输入信息处理的Actor
Character,包含了行走、跑步、条鱼等更多动作的Pawn
PlayerController,负责控制玩家所使用的Pawn
Game Mode,定义了游戏是如何被执行的,游戏规则;
可以在CB中,使用Add New,或右键菜单,创建蓝图类;
对于部分资源,如静态网格、粒子系统,可以右键,从资源中创建蓝图;
蓝图编辑器同材质编辑器、纹理编辑器等,都是一个独立编辑器窗口,继承于相同的编辑器基类;
ctrl+f,在当前蓝图中查找对函数、事件、变量和引脚的使用;
ctrl+shift+f,在所有蓝图中查找;
在编辑器中运行:在play下拉按钮下选择>选中的视口;shift+f1重新获得鼠标控制;
在编辑器中模拟:在模拟期间可以完全访问编辑器中的工具,可以修改场景内容,但是在模拟过程中未使用玩家控制器,无法进入游戏控制;可以使用保持模拟修改来保存改动(在视口或世界大纲视图中右键菜单下选择);
process可从Play In Editor到simulate in editor之间相互切换;
运行相关工具有运行、暂停、继续、按帧执行、停下;
组件窗口
组件是可添加到actor的一个功能,不可以独立存在;
蓝图编辑器的组件窗口用于将组件添加到蓝图,通过胶囊组件(CapsuleComponent)、盒体组件(CubeComponent)或球体组件(SphereComponent)添加碰撞几何体,以静态网格体组件(StaticMeshComponent)或金属网格体组件(SkeletalMeshComponent)形式参加渲染几何体,还可以将组件列表中的组件指定给实例变量,以便在此蓝图或其它蓝图的图表中进行访问;
添加组件:可以从下拉列表中选择一些组件;还可以从内容浏览器中将资产拖到组件窗口中来添加组件,这种只适用于部分资产类型,如网格、粒子系统;
变形组件:组件被添加到关卡中时,会默认放在实例的位置中,可以在视口或细节面板中进行TRS等(不同于unity,这里的组件都有自己的位置属性);
组件资产:可能需要指定组件的资产,如为StaticMeshComponent指定一个静态网格,可以在对应的槽位部分,点击下拉框选择;也可以在CB中找到指定网格拖拽到那里,或使用左箭头按钮进行赋值操作;使用搜索按钮可以导航到该资产在CB中的位置;清除资产,可以重置为默认(如果默认为none),也可以在资产选择的下拉菜单中使用clear;
组件事件:添加事件的两种方式,第一种在组件窗口中右键>添加组件,或者在细节面板中单击添加事件;这两种方式都会将一个新的事件节点添加到事件图表(Event Graph)中;还可以在我的蓝图中右键单击组件,访问添加事件上下文菜单;并非所有的组件都有关联的事件,如点光源组件就只包含功能;
我的蓝图
作用概述:我的蓝图选项卡显示了蓝图中图表、脚本、函数、宏等内容的树状列表,本质上是蓝图的轮廓;不同类型的蓝图将在树状列表中显示不同的项目类型;蓝图中创建的函数都将被显示,而关卡蓝图仅会显示EventGraph和其中创建的函数,接口仅会显示其中创建的函数;
新建按钮:一共有五种,变量、函数、宏、事件图表、事件调度器;
图表编辑器
图表编辑器面板是蓝图系统的核心,在此创建节点和线路的网络;
StaticMesh、SoundCue、SkeletalMesh和ParticleSystem资源可从内容浏览器拖放到图表编辑器中,以使用自动分配的资源创建新的AddComponent调用;
关卡蓝图相关操作
引用Actor:在关卡蓝图编辑器中,如果要引用一个actor,可以在关卡视口或世界场景大纲视图中选择Actor,然后在编辑器图表中右键创建一个对selected actor的引用;也可以从世界场景大纲视图中直接拖拽actor到图表中
添加事件,可以在关卡视口中,点击一个Actor,右键添加一个事件;也可以先在关卡视口中选中一个actor,然后在关卡蓝图中的事件图表中右键,在菜单下添加事件;
变量可以是不同的类型,包括布尔型、浮点型等数据类型,也可以是Actor、Component等引用类型;
在创建变量时可以选择变量类型和容器类型;
它可以通过蓝图实例来进行外部访问;
将结构体变量添加到蓝图的方法和其它变量相同;
分离结构体引脚:如果需要访问结构体内的单个变量,可右键点击引脚,选择split struct pin;分离后可单击任一分离的引脚进行重合并;
拆分结构体:使用break struct节点可以将结构体拆分为子结构体;使用的结构体不同,break struct节点的命名和输出引脚也不同;
创建结构体,使用make struct可以创建新的结构体,创建的结构体不同,节点的命名和输入引脚也不同;
使用自定义结构体:可以在CB中点击右键,在蓝图选项中选择结构体,然后可以在结构窗口中添加变量及其默认值;
在细节面板上选择容器类型为数组即可;
可以在细节面板上设置默认值,也可以通过节点网络设置数组值;
比如使用Add或Insert节点来添加一个新值或插入一个新值;
在细节面板上选择容器类型为map即可;
创建完map或对map进行修改后,必须重新编译后才能在编辑器内生效;
容器属性
键值不能为空且唯一
一个map中的键值类型必须相同
相关节点,即map的一些常见操作
add,remove,clear,Contains,Find,Keys,Values等;
set集合,
相关节点:Add,Remove,Clear,Contains
Difference,获取两个set的差异(合集-交集);
Intersection,获取两个set的交集;
Union,执行两个set的合并;
cast to转换节点,想当前节点转换到目标节点类型;
可以将一个或多个事件绑定到事件分发器中,可以在调用事件分发器时触发所有与之绑定的事件;
创建一个事件分发器后,可以为其添加输入,也就是调用事件时要传递的参数;
使用事件分发器:创建了事件分发器以后就可以添加事件节点,绑定节点,取消绑定节点等;
事件、绑定和解除绑定节点都可以添加到蓝图类和关卡蓝图中,除了事件节点,每个节点都有一个目标输入引脚;
在蓝图类中,此引脚自动设置为self;
在关卡蓝图中,此引脚必须关联到对关卡中该类的一个实例的引用;
绑定和解除绑定事件:Bind、Unbind及Unbind All节点,同一事件不能重复绑定;第一种方式,直接从事件分发器中将分发器拖拽到面板中;第二种方式,在图表中点击右键,从事件分发器选项中查找;
调用事件分发器:拖拽分发器到图表中,选择Call选项
创建分发器事件:事件如果要绑定到分发器需要通过绑定节点,将事件的引脚连接到绑定事件节点的输入引脚,即完成绑定。有两种方式创建事件节点,第一种,拖拽分发器到图标中,选择Event;第二种,从绑定节点的输入引脚拖拽,从而打开上下文菜单,从事件中选择添加自定义事件;
事件和自定义事件
对于自定义事件,不能外部触发,只能通过Call function来执行或通过控制台命令显式执行。
event实际和委托、函数等比较类似,只是它不需要我们在function中定义一个函数体而已,就像C++中的lambda表达式一样。
8.函数
函数是一个节点图表,它可以从蓝图中的另一个图表执行或调用,函数具有一个由节点指定的单一进入、函数的名称以及包含一个执行输出引脚;
创建函数后可以设置输入和输出参数;
定义功能,可以自行添加节点定义功能;
调用函数
一旦创建并定义了函数,即应在事件图表中调用它;可以从函数选项卡将其拖动到事件图表中的空白位置;(可以使用print string节点来调用打印结果)
函数的调用主要有两种
self funciton calls,调用属于蓝图本身的函数;
other function calls,除了该蓝图之外其它对象或actor的函数,如蓝图中包含一个组件,调用该组件的函数;
构造脚本:创建蓝图类的实例时,构造脚本在组件列表之后执行,它包含的节点图表为蓝图实例化后的初始化操作;
函数的details中可以设置访问限定符,public/protected/private,这些限定仅限定于蓝图内的访问,对于lua而言,依然可以访问设置为private的蓝图函数;
在函数选项卡中,还可以通过Overrride按钮选择需要重写的父类函数,如果需要调用父类函数,可右键点击节点,选择添加对父类函数的调用;
开关节点
开关节点是对分支控制结构swich的模拟,不同类型的switch是指不同数据类型的开关:Int,String,Name,Enum;
当Int,String,Name开关节点被添加到蓝图时,都会只有一个Default引脚,可以自行移除;
对开关的编辑主要是添加、删除case;
Branch
等同于if-else结构
DoN/DoOnce
该节点将会触发N/1次执行脉冲,在达到限制后会停止所有输出执行,知道脉冲被传入其Reset输入;
FlipFlop
该节点用于两个执行输出循环切换;
ForLoop
该节点等同于for循环,
ForLoopWithBreak
该节点包含了能中断循环的输入引脚
Gate
门,可视为一个只有两种状态的状态机,Open状态和Close状态,当执行引脚设置为open状态时,执行脉冲传送到Exit输出引脚;如果执行引脚设置为close状态,则停止传送到Exit输出引脚;Toggle引脚是用于切换的,如果是open则变为false,如果是false则变为open;
MultiGate
取入单个数据脉冲并将其传送到任意数量的潜在输出,这个过程随机按顺序发生,可能会循环;
可以设置是否循环,或者是否随机等;
Sequence
序列,使得单个执行脉冲能按顺序触发一系列事件,节点可能有任意数量的输出;
WhileLoop
测试条件和主体,在每次执行前都会计算WhileLoop的测试条件,如果为true则执行;
节点是指可以在图表中应用其来定义该图表对应蓝图的功能的对象,它可以是变量、事件、函数调用、流程控制操作等;
断开所有连接,alt+左击引脚;
移动所有连接,ctrl+左键拖拽到引脚;
引脚会有不同的颜色编码,代表不同的连接类型;
不同类型的变量不一定可以连接,如果可以转换,就可以连接,不过会添加一个转换节点;
选择节点,使用ctrl+点击,可以将节点添加到选中节点中;也可以用shift+拖拽,会将区域内的节点作为选中节点;
节点两侧都可以有引脚,左侧是输入引脚,右侧是输出引脚;
有两种主要的引脚类型:执行引脚(execution pins)和数据引脚(data pins);
执行引脚:用于将节点连接在一起以创建执行流程,当输入执行引脚被激活,就会执行当前节点,并激活输出执行引脚继续执行流程;未连接时为空心,连接后为实心;函数调用节点只有一个输入引脚和输出引脚,其它节点可以有多个输入引脚和输出引脚;
数据引脚,用于将数据导入节点或从节点输出数据,不同的数据类型会有不同的引脚颜色,连接与未连接分别显示实心和空心;
Promotion to Variables,提升为变量
可以将引脚表示的值转化为一个变量,它会创建一个新的变量,从本质上讲,它只是手动添加一个新变量并将其和数据引脚相连的快捷方式;
执行引脚连线,执行引脚的箭头代表了执行流程走向;当正在执行“执行引脚连线”时,连线会产生一个可视化的效果,表明正在从一个节点转换到下一个节点;
断开:右击引脚选择断开或使用alt+单击断开;
折叠节点:出于组织管理的目的,图表中的一组节点可以合并到一个子图表中,选中一组节点后右键在组织菜单下找到折叠节点,然后这一组节点会被组织成一个单独的节点;
展开节点:对折叠后的节点可以进行重新展开;
组织和折叠不改变节点的实际功能和作用,它仅仅是一种组织整理的方式,隐藏内部复杂度;
直接蓝图通信,在关卡中存在里那个Actor,可以在关卡蓝图中获得两个Actor的引用,然后获得蓝图类的变量(还可以获得类包含的组件,调用其函数),也可以调用蓝图类的函数等;
可以使用断点进行调试,在节点上添加断点,使用Resume(相当于F5),F10,F11等进行调试;
在Debug/Blueprint Watch Window下,可以打开查看窗口,下面有如下三个大页签,CallStack/Watches/ExecutionFlow;
对于蓝图,可以使用alt+shift+R来查看Reference关系,对于理清蓝图结构非常方便,相当于类图;对于蓝图的函数,也可以右键来查找所有的引用;
知乎:理解蓝图技术架构,该文章结合源码介绍了蓝图从创建到运行的基本原理;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。