UE4

UE4 基础

Posted by Kang Cai on September 18, 2020

大世界游戏系统开发

  • AI(Artificial Intelligence)系统
    • 行为树
      • Blackboard 黑板
      • 自定义 Task 节点
    • Goal-Oriented
  • GAS(Game Ability System)技能系统
    • GameEffect
    • 动画蓝图
      • AnimGraph:状态机(常驻状态可以是用混合动画实现的行为走,其他为 Cannot Move)-> 蒙太奇的指定插槽 -> 输出姿势
      • 事件图表:更新 AnimGraph,主要是更新状态机需要读的变量
    • Montage 动画蒙太奇,技能打点 notify
  • Inventory System 背包系统
    • 背包
    • 装备
    • 道具槽

UE4 技能系统组成

  1. 技能:RPGGameplayAbility,技能包括了“选敌+效果”
  2. 选敌:RPGTargetType,可自由定义如“沿给定线的多球体检测”,
  3. 效果:GamePlayEffect

UE4 AI开发流程

新建 BlackBoard -> 新建行为树,根节点挂 Blackboard -> 为行为树新增和挂接节点

新建 AIController 子类 -> 将 AIController 挂在角色的 Pawn 上 -> AIController 初始运行行为树

到这里,可以查看逻辑有没有跑通,逻辑跑通之后,可以解决角色动画切换的问题,流程如下,

在主动画蓝图中新增动画切换状态机 -> 为角色新建一个混合动画蓝图,作为状态机的新增状态 -> 设置不同的速度对应不同的动画表现


如何修改蓝图的基类

两种办法:

  • 第一种:进入蓝图编辑界面 -> 点击上方工具栏的“类设置”
  • 第二种:进入蓝图编辑界面 -> 文件 -> 重设蓝图父项

UE4 技能开发流程

新建 AnimNotify -> 新建动作蒙太奇 -> 使用 Notify 打点 -> 蒙太奇加入到动画蓝图

Send Gameplay Event to Actor(Actor, EventTag, Payload)


UE4 RPG 如何绑定 Character 和 Controller?


UE4 RPG 示例中找不到 GetSlottedItems 函数

函数有对应的类,比如 GetSlottedItems 函数在以 RPGPlayerControllerBase 为基类的蓝图中


UE4 RPG 如何添加 item slot?

  1. 直接在 RPGCharacterBase及其子类的蓝图数据面板中设置
  2. 通过 RPGPlayerController 里的 SetSlottedItems 函数动态设置

通知事件在哪里定义?

事件分发器


如何增加 RPG Item Type 的种类

可以通过下述流程添加:Project Settings(项目设置) -> Game(游戏) -> Asset Manager(资产管理器) -> Primany Asset Types To Scan(要扫描的主资产类型)


如何导入插件和模块

比如对于 GAS(Game Ability System)技能系统,除了在插件管理中启用 GameplayAbilities 插件,还需要手动做以下两步:

1.在项目对应的 uproject 文件中加入对应的 moudles,如下所示,

{
	"FileVersion": 3,
	"EngineAssociation": "4.25",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "ActionRPG",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		},
		{
			"Name": "ActionRPGLoadingScreen",
			"Type": "ClientOnly",
			"LoadingPhase": "PreLoadingScreen"
		}
	],
	"Plugins": [
		{
			"Name": "GameplayAbilities",
			"Enabled": true
		}
	]
}

如何看网上教程时发现蓝图中没有对应的类或函数,就去找到缺失的模块,加入到该文件中。

2.添加模块文件


如何调整摄像机?

找到 CameraBoom,常用的有调整初始镜头位置、目标臂长度、探头大小(作用是调整摄像机碰撞体大小,小一点比较好)


如何为非静态网格体编辑碰撞?

在碰撞相关的 Component 里编辑,比如胶囊体就是 CapsuleComponent 里可以编辑形状


如何加脚步特效?

通过 Anim 时间轴事件 -> 触发自定义的 FootstepAnimNotify 脚本 -> 触发通过 Niagara 系统播放 Actor 上挂着的脚步特效


如何将 bsp 盒体转换成 static mesh?

右边“细节”栏中可以选择


如何批量导入植物?

在内容浏览器中全选后直接拖到植物类型面板中。


如何导入在项目中粘贴 uasset?

  1. 项目没有打开的时候,直接将.uasset文件复制到项目Content目录下,打开工程就可以看到了。
  2. 项目打开的情况下导入的话,重启之。

以上导入的都应该是本地文件夹,不是直接拖入到Editor中。


变量如何分组

直接在 细节->类别 上编辑