23 / 10 / 11

Unreal 笔记之二

一些蓝图节点

add timeline 可以用来控制时间轴。

其中时间轴可以使用reverse参数。(但其实基于时间轴的动画CPU开销蛮大的。)

双击打开进行设置,包括时间等特殊参数,还可以拉曲线。右键以添加关键帧,在已有的关键帧上右击可以拉曲线。

Lerp 是插值节点。在两个值之间变化时,使用这一节点。lerp(rotator)适合用来处理旋转。

set capsule half height 节点可以设置碰撞盒高度。

可以用 add custom event 来设置自定义事件。

branch 是分支节点。B+鼠标左键生成一个分支。

RestartLevel 命令可以重启关卡。

GetPlayerCharacter 节点可以获取对玩家角色的引用。

Get Overlapping Actors 节点可以用于获取重叠信息。它会输出一个数组,内容是重叠的所有Actor。0号是Target 自己。

is Valid 用于判断某变量是否存在。

set simulate physics用于赋予物理效果。

wake all rigid bodies显然用于碰撞。

用户控件

User Interface文件夹下的空间蓝图用于设计页面。

后处理

可以给后处理设置优先级。

setblendweight 节点可以动态地调节混合力度。

map range clamped 节点可以按两个函数进行正比例映射。

蓝图的引用

要在蓝图B中引用蓝图A的函数,需要将蓝图A作为一个参数新增到蓝图B中。变量类型中选择蓝图A,并附上相应的引用方式。

这一引用需要手动在蓝图编辑器中暴露,才能在主场景的细节面板中编辑函数的作用对象(如果引用本身有其它实例的话,就可以挑选一个或几个)。

同时,可以通过在蓝图B中添加类型为Actor的变量来实现对场景中物体的引用,在这之后只需要通过Loop节点遍历对变量自身的引用(self)即可。

实现关卡设计

在项目设置-引擎-碰撞中设置自定义碰撞可以方便地管理事件。

一般来说,为可互动物品添加两个大小不同的球体碰撞很好用:外层用来显示提示,内层用来交互。

Promote to Variability节点可以将端口提升为变量。

创建交互式父类Actor

类似的,可以用构造蓝图来进行初始化,一个常见的用法是使用get actors in class 节点获取某父蓝图的所有实例,并把他们加入到某个可互动对象中。

例如,如果我们有BP_Interactive_Parent和BP_Key_Parent两个作为实现“锁和钥匙”关系的父类actor,并实例化了BPC_Door和BPC_Key放在关卡中,只需要在BPC_Key的事件中写入“设置可互动对象”方法,并在构造蓝图中获取BPC_Door类并在这个方法中调用,就可以用钥匙解锁所有门。这样的设计可以在复用大多数互动逻辑的同时,尽可能减少不同子蓝图之间的串扰。

GameMod、UMG控件、关卡蓝图和物件的配合

以”制作一个踏板,踩上去打开游戏结束界面“的场景为例子:

新建一个UMG资产,实现结束页面的设计和地图的跳转;

GameMod中新增一个自定义事件,在其中显示刚才创建的Widget和一些其它操作方面的逻辑性控制;

物件中对事件进行强制类型转换,调用这个自定义事件;

以”手动进入暂停页面“为例,补充另外一些细节:

角色蓝图中制作隐藏部分元素的功能,可以把一部分ui组件实例从父类中移除来实现,以节省性能;

player controller中处理交互,必要的时候重载隐藏功能。一般的时候直接调用即可。