虚幻5 , 魂like更牛逼的框架 的学习过程!!!!!!!!!!!!!!!!!!1

https://soulslike-framework.isik.vip/getting-started/quickstart
价格也是更贵, 2k

  1. 先看这个工具的使用:
    image

点这个红色部分.image
他会等效于调整下面的部分. 这个红色按钮只是一个例子. 等效的你找到相关蓝图就可以修改底层了.比如这里面武器只给了太刀的,你可以根据这个类比改其他武器.

image

  1. _Utility 是项目专门用来存放「编辑器扩展工具」的目录,前缀下划线是 UE 项目常用习惯:把仅编辑器内生效、游戏运行(打包 / PIE)不会执行的工具资源单独归类,和正式游戏业务资源做隔离

utils蓝图在这里看:
image

  1. using-a-custom-character

使用blender, tab键可以切换为编辑模式, 才能改mesh

  1. Creating & Editing Actions

都是先点下面的create action,再点browser action设置.

image

openlogic
image

  1. 改boss mesh
    image

image
所有场景中最终极的东西就是blueprint class. 最终设置的都在这里找.

蒙太奇不能改retarget
动画sequence可以改retarget
好像蒙太奇底层的动画sequence设置好retarget,蒙太奇自动会替换好?

积累差不多了. 开始从0读所有蓝图:

先看蓝图库:

默认情况下,项目内所有蓝图(关卡蓝图、Actor 蓝图、Widget 蓝图、其他 BFL 函数库)都能直接调用 BFL 里写好的纯函数 / 普通函数,无额外绑定、无继承要求

编辑器里随便放哪个文件夹都能正常调用
只要资产在项目 Content/ 目录下(子文件夹任意层级),所有蓝图都能搜索并调用该 BFL 的公开函数,不受文件夹路径限制。

先看这个:
/Game/SoulslikeFramework/Blueprints/BFL_Helper.BFL_Helper

image

遍历全部的按键绑定mapping, 如果有输入里面的target ia. (ia,表示input action),那么就返回这个target所对应的按键.

image

World Context Object(世界上下文对象) 是 UE5 蓝图里的特殊对象引用,本质是能访问当前游戏世界(UWorld)的任意 Actor / 对象。
引擎通过它获取当前关卡、玩家、子系统、时间、场景资源等全局游戏信息。

image

就是用来打印状态信息. 方便玩家看.

image

输入一个数组, 去重后再返回去重后的数组.

image

返回一个保存文件的名字的字符串, 保证这个字符串不是跟之前的保存名字重复.后面索引是递增排序的.

image

返回savedata的信息, 具体这个tag什么意思, 现在还没理解. 这个里面是save game tag.

image
savegame tag是一个gamelplay tag类型. 具体这个gameplay tag是做什么的还没理解.
好像是游戏里面的一种标识符类型. 一种树结构.
image
向量的二范数是否大于一个值.

image
判断是否可以背刺, 返回布尔值.

image
判断是前方打击到敌人还是后方还是左边还是右边.

image
跟上个差不多, 根据被击打部位, 写入死亡不同方位的tag.

image
返回特定类型的location actor.

image
从actor reference 找到他的hud

正确层级关系(顺序、归属完全纠正)
GameMode → PlayerController → HUD
PlayerController → Pawn(Actor)

controller包含:

  1. HUD
  2. Player State
  3. Input Component 输入组件
  4. Camera Manager 相机管理器

几个核心概念!!!!!!!!!!

GameMode:全局规则、生成玩家控制器、全局 AI、一局游戏总逻辑;不存玩家 UI、输入;
PlayerController:玩家专属枢纽:输入、相机、HUD、玩家状态、操控角色;
Pawn/Character:只负责角色实体:模型、动画、碰撞、移动物理、血量计算;不管理输入、相机、UI;
HUD:只负责 2D UI 绘制,纯显示层,不处理输入、角色逻辑。

image

技能释放之后,冷却. 冷却好了才返回is cooled=True.表示冷却走完了.

image

效率更高的宏写法.
用户指定array 和loopbody即可.
看见sequence里面,执行完loopbody之后会继续迭代array

image
同理逆向迭代数组.

/Game/SoulslikeFramework/Blueprints/BML_StructConversion.BML_StructConversion
结构体宏.


/Game/SoulslikeFramework/Blueprints/_AI/Misc/B_PatrolPath.B_PatrolPath

image

效果就是人物在0-5 这6个节点来回走(0,1,2,4,5,4,3,2,1,....). (5是举例子)
这里面route是spline物体. 是一个数组.

/Game/SoulslikeFramework/Blueprints/_AI/Misc/AIC_SoulslikeFramework.AIC_SoulslikeFramework

ai_controller父类image
aic: ai controller

/Game/SoulslikeFramework/Blueprints/_AI/BT_Enemy.BT_Enemy

Event Receive Execute AI 节点详解(UE 行为树蓝图任务入口)
一、节点作用
这是自定义行为树 BT 任务的主执行入口事件:当行为树运行调度到当前这个蓝图任务节点时,引擎会自动触发该事件,后续所有任务逻辑(你之前写的焦点开关、转向处理)都要从这个事件的执行输出引脚往后串联。
二、两个输出引脚含义
Owner Controller
输出当前 AI 对应的AI 控制器(AIController)实例,也就是你项目里的AIC_SoulslikeFramework对象,绝大多数 AI 控制接口(SetFocus、ClearFocus、寻路指令)都要以它作为调用目标。
Controlled Pawn
输出该 AI 控制器所操控的怪物角色实体(Character/Pawn),可用来读取角色位置、动画状态、韧性值等角色自身数据。

/Game/SoulslikeFramework/Blueprints/_AI/Services/BTS_DistanceCheck.BTS_DistanceCheck

image

这个根据设置的compareType,判断两个actor之间的距离关系.返回布尔值.

/Game/SoulslikeFramework/Blueprints/_AI/Services/BTS_SetMovementModeBasedOnDistance.BTS_SetMovementModeBasedOnDistance

ai跟玩家距离来判断是否是跑还是走
image

image
获取角色周围随机一个位置然后写黑板target变量里面.

image
解释这个蓝图.
首先在0到最大值之间取一个值,a 然后我们要把这个值对应的真实method算出来.
方法是把遍历这些score.如果a<当前score. 那么就是这个score对应的method.
如果当前a>score, 那么a减去score,再循环.通过这种方法就把这个method随机抽样出来了.

image
这个图就是简单的读取patrol地址, 然后ai走过去.

image

把key和keydata根据类型写黑板里面.

image
moveto函数的视线, 对于ai来说先判断target是一个actor吗. 如果是,直接走过去.
如果不是那么target是一个vector.按照坐标走过去.

image

查看是否已经focus了.然后获取一个focus对象, 已经有了那么就pass, 如果没有那么就锁定一下target指定的这个对象.

/Game/SoulslikeFramework/Blueprints/_Characters/B_BaseCharacter.B_BaseCharacter

核心最底层的玩家蓝图-----------很大的一块蓝图.

image

SPAWNING / DESTROYING RELATED:生成、销毁 Actor 相关的节点分组,专门收纳生成物体、销毁物体、出生 / 死亡触发的逻辑
MONTAGE RELATED:动画蒙太奇(AnimMontage)相关逻辑,比如动画播放结束回调、蒙太奇事件绑定
NIAGARA RELATED:Niagara 粒子特效系统的专属逻辑,特效生成、参数修改、特效结束事件都归这里
GAMEPLAY RELATED:常规游戏玩法逻辑,战斗、移动、交互、数值计算等通用玩法代码

charcter interface: 接口的视线.

VARIABLES(变量区)
存放该蓝图所有成员变量:
Components:该 Actor 挂载的所有组件(胶囊体、网格体、AI 控制器、音频组件等)
Caches:缓存变量,一般存反复读取的计算结果、引用,避免每帧重复查询计算,优化性能

Bind Event to On Rotation Lerp End: 会触发event disaptcher里面的 On Rotation Lerp End

Call On Location Rotation Lerp End: 触发事件,主动推送信号,唤醒所有订阅过该分发器的逻辑

下面一个一个看:
第一个自定义事件:
image
就是在spawnactor函数前面套一层变成event.建立一个捡东西的actor.

image
同上.

image
服务端跟客户端同时保持生成actor.

image
这个是异步加载:
高频、核心资源(主角武器、常用技能):用硬引用 / 预加载 使用上面的方式
低频、稀有、大量可选资源(稀有道具、大招特效、场景隐藏物件):软引用 + 用时异步加载,就是这个异步加载的soft模式.

image

Should Stop All Montages(红色布尔勾选框)
勾选 = 播放本次蒙太奇前,强制停止该骨骼体上所有正在播放的其他蒙太奇;取消勾选则允许多个蒙太奇叠加播放。

image
load加载的资源, 一定要手动cast

image
进行优先蒙太奇的动画播放.

image

生成附着型一次性 Niagara 特效

Auto Destroy 特效播放完自动销毁(一次性特效必开)
Auto Activate 生成后立刻播放粒子,无需手动触发激活
Pre Cull Check 相机看不到时直接不生成特效,优化性能
所有带spawn的函数都是生成一个object的.

image
名字叫set speed, 实际上的意思是设置最大速度. 用户移动是慢慢加速的.

image

swtich has authority表示当前是否是服务器端, 如果是服务器端那么直接跳跃就行. 如果是客户端, 那么再调用srv 服务器端跳跃.让服务器跟客户端保持一致.

image
受攻击停顿: 俗称卡肉
SET Custom Time Dilation=0 表示全局静止.
duration传入多久就是全局暂停多久, 然后set timer by event.
是过了多久后触发event,这里面触发的event是把 SET Custom Time Dilation=1,
表示恢复正常速度.

image

线性平滑移动旋转

image
显示锁定的白色图标

image
软加载声音素材然后播放.

下面我们看他的子类:

/Game/SoulslikeFramework/Blueprints/_Characters/B_Soulslike_Character.B_Soulslike_Character

begin play:

image

每0.1秒我们就读取控制器的方向控制, 然后设置角色的方向为这个方向.

image
过0.25秒然后设置这个变量为true

create event:
动态创建一个带指定函数签名的自定义事件

image
根据选择的人物进行

image

image
旋转的设置.用x轴跟z轴.设置rotation.第三人称都这样.

image
这里面要赋值2次.
第一次处理x轴的方向, x轴负责玩家左右走.
第二次处理的是y轴的方向,也就是前后走.前后走是z轴的控制.他的分量z, 控制z轴.

image
玩家移动的时候更新雷达, 不移动的时候不要更新雷达. 节省算力.

image

控制鼠标移动控制视野的.
首先如果交互情况下, 视角锁定

image
鼠标中键重置相机视角.

image
运行camera动画, 用于处决, 背刺.

交互

image
当射线检测到npc时候, 我们进行显示e图标.如果检测不掉就触发隐藏.

image
按下交互键e

按下交互键瞬间,执行流进入 Do Once,走 Completed 调用交互事件,Do Once 立刻锁死,防止长按重复触发交互;

因为玩家可能会疯狂按e. 所以这里面用doonce.来保证指令不会重复.

image
激活篝火逻辑:

image
actor先移动到门的位置, 然后播放开门蒙太奇.
核心移动节点 Generic Location and Rotation Lerp Target = self(玩家角色,真正移动的主体)
蓝图里面写的self, 他就表示这个蓝图所属的actor

image

爬**, 开箱子都是这个逻辑,
绑定location rotation lerp吸附之后,触发move to event
玩家先触发location rotation lerp吸附, 把人吸附到**上,
触发move to event, 然后这个event 触发解除location rotation lerp吸附.

逻辑就是先绑定吸附之后一个事件, 这个事件是取消绑定,设置正在爬.

所有交互都大概这个逻辑.

image
输入锁定触发.

image

Is Locally Controlled(UE4/UE5 蓝图节点)
核心定义
这个节点属于 Pawn / Character 自带函数
✅ 作用:判断当前这个 Pawn(角色)是否被本机本地控制器操控

多人联机场景真值对照表
假设:联机,你操控玩家 A,能看见玩家 B
你的电脑(客户端)
你的角色 A:Is Locally Controlled = True
其他玩家 B:Is Locally Controlled = False

image
动作都是

image
queue action是整个动作体系的核心.
所有动作都按照一个队列进行存储,进行播放.居然代码这么短.
逻辑是如果buffer open了.如果队列打开着, 那么就把动作入队. 让他自己安排什么时候播放.
如果队列关闭了,那么直接队列head进行播放队首的动作. 也叫consume. 整体就是生产者消费者模型.

image
背刺逻辑. 先进行胶囊检测.找到target目标.

image
查看目标是否实现了背刺接口, 然后判断是否背对.

image

这里面逻辑是先蹲下然后进行背刺.

image
这里面是处决, 任何敌人都可以处决, 只有人类敌人可以背刺.
处决用的是球胶囊, 判定更宽松.

碰撞的东西:
数组第 0 项 = 最先碰到(离起点最近)

image
重攻击写的过于简单, 蓄力重攻击还没有实现.
可以蓄力重攻击跟他一个动画.

image
input_buffer的使用. 如果玩家没死,那么就执行这个动作.

image
更新建模的建模片.

dataload
image
第一步是加载存档的玩家位置和旋转, 然后赋值给玩家.

image
重新在召唤actor

image

chaos:用来做物理打碎的.

Sphere Trace For Objects 关键结论
✅ 是的!这个节点最多只返回【第一个碰撞命中结果】,只能拿到 1 个 Hit(Out Hit)

Sphere Multi Trace For Objects:数组输出,返回沿途全部命中对象(Out Hits 数组引脚)

image
构建模块化的模型动态构建.

image
根据鼠标移动, 计算camera的偏移量.

image
重置摄像机.

/Game/SoulslikeFramework/Blueprints/_Characters/Enemies/B_Soulslike_Enemy.B_Soulslike_Enemy

下一个核心的类:
敌人基础类:
他是继承base character

VFX = Visual Effects 视觉特效(视效)

loot
战利品.

2种不同被攻击的动画:
IK Hit Reaction(当前逻辑):叠加扰动,不打断原有动画,轻受击
【原有动作继续播放 + 骨骼微微扭曲晃一下】
AnimMontage 受击:切换动画,打断当前动作,重硬直
【停止现在动作,播放独立受击动画】

父类子类蓝图:

先说核心结论:不会直接覆盖!但是要区分两种情况(蓝图继承规则)
先看懂你这张图逻辑:
On Death 是来自父类 AC_AI_CombatManager 的委托 / 事件。
你在子类蓝图绑定 / 重写这个事件,和父类里面同一个事件写逻辑,互不覆盖。
情况 1:如果是【Event Dispatcher 调度器(委托绑定)】(你图里这种 On Death)
父类:绑定 OnDeath → 执行 A 逻辑
子类:再次绑定 OnDeath → 执行 B 逻辑
✅ 结果:触发死亡时,A、B 两套逻辑都会运行,互不覆盖!
不是覆盖,是叠加执行。
⚠️坑:
如果你不想要父类逻辑同时跑,不能单纯在子类写新逻辑;
要么父类加开关控制,要么子类解除父类的绑定。
情况 2:如果是【Override 重写事件(Override Event)】(蓝图左上角绿色 Override)
这种才会覆盖!
父类:Event ReceiveDamage 写逻辑
子类:Override ReceiveDamage
👉 默认只跑子类代码,父类逻辑不再执行,除非你手动调用 Call Parent Function。

/Game/SoulslikeFramework/Blueprints/_Characters/Npcs/B_Soulslike_NPC.B_Soulslike_NPC

然后看npc的处理逻辑

image
对npc进行移动.

image
用来判断一个uuid是否有效.

image
播放开场动画

创建动画acotr,然后播放, 播放完销毁.

/Game/SoulslikeFramework/Blueprints/_WorldActors/_Items/B_Item.B_Item

item的父类.不做什么逻辑.

/Game/SoulslikeFramework/Blueprints/_WorldActors/_Items/Usables/B_Item_Lantern.B_Item_Lantern

贴身的小灯:
image

使用这个贴身的小灯的逻辑:

Get Instigator(获取肇事者 / 发起者)
返回值类型:Pawn(人物 / 可被控制器操控的 Actor)
简单理解:这个 Actor 是谁造成的、是谁扔出来的、是谁发起这次行为的那个角色。
和 Owner 的区别(非常容易搞混)
Instigator(肇事者):谁做的这件事(人 / 角色 Pawn)
例子:玩家扔手榴弹,手榴弹的 Instigator = 玩家角色
手榴弹爆炸造成伤害,系统就知道是这个玩家造成的伤害,用于计分、击杀判定、友伤过滤。
Owner(拥有者):谁拥有这个对象,可以是 Controller/Actor。
手榴弹:Owner 可以是玩家 Controller;Instigator 是玩家 Character(Pawn)。

所以第一步先拿到玩家的对象.然后加载这个台灯mesh到latern socket.
Set Timer by Event(按事件设置定时器)UE 蓝图
作用:延迟指定秒数之后,触发绑定的 Event 事件;

Set Simulate Physics(开启 / 关闭物理模拟)UE 蓝图
Target 目标是 Primitive Component(图元组件,例如 StaticMeshComponent 静态网格体组件)
作用:控制组件是否开启物理引擎模拟,勾选后物体会受重力、碰撞、外力影响,会掉落、滚动。

image
切换他的材质

/Game/SoulslikeFramework/Blueprints/_WorldActors/_Items/Weapons/B_Item_Weapon.B_Item_Weapon

继续看武器
先看武器的基类.

第一个函数. 装备武器事件:

image

prio是优先级高的动画, 这里面是受击动画.

image
ai武器:

/Game/SoulslikeFramework/Blueprints/_WorldActors/Interactables/B_Interactable.B_Interactable

交互物品的父类.

image
加载游戏时候触发:

image
带黄色齿轮的是实现了的
不带黄色的,而是白色齿轮的是不实现,而是继承父类的.

普通门:
image
开门蓝图.

Get Actor Location
Target 要求:Actor 对象本身
含义:获取Actor 根组件的世界坐标位置,本质等价于 Actor.RootComponent.Get World Location
Get World Location
Target 要求:任意场景组件(Scene Component,包括静态网格、胶囊体、骨骼网格、子组件等)
含义:获取该指定场景组件自身在世界空间的坐标
两个函数的区别. 就是target的类型不同.

向量1是门的前向量.
向量2是从门的前向量指向玩家.

image

两个向量做X乘机.

UE 左手坐标系 + 左手叉乘定则实操举例
一、先明确基础规则

  1. UE 默认轴向规范
    X 轴:角色向前
    Y 轴:角色向右
    Z 轴:角色向上
  2. 左手叉乘定则操作步骤
    伸出左手,四指先指向第一个输入向量 A;
    四指朝着第二个输入向量 B的方向弯曲(小于 180° 夹角转动);
    大拇指竖直指向的方向,就是 A Cross B 最终结果向量方向。

经典用发: X乘

经典示例 2:判断敌人在玩家左侧 / 右侧(游戏高频用法)
步骤拆解
玩家自身前向向量 ForwardVec(A 向量)
玩家指向敌人的方向向量 DirToEnemy = 敌人位置 - 玩家位置(B 向量)
计算 CrossResult = ForwardVec Cross DirToEnemy,只看结果 Z 分量:
左手判断逻辑
Z>0:大拇指朝上,敌人在玩家右侧
Z<0:大拇指朝下,敌人在玩家左侧

/Game/SoulslikeFramework/Blueprints/_WorldActors/Interactables/B_BossDoor.B_BossDoor

boss门:

image

UE Set Collision Enabled 6 个选项完整详解(适配你的门组件场景)

  1. No Collision
    含义:完全关闭碰撞,无物理阻挡、无射线查询、无接触事件
    门场景用途:开门后设置此项,玩家、物体可直接穿过门板门洞
    特点:彻底屏蔽所有碰撞逻辑,不会产生任何阻挡与检测
  2. Query Only (No Physics Collision)
    含义:仅支持射线 / 扫描查询(LineTrace、SphereTrace),无物理阻挡
    门场景用途:开门后保留交互检测(比如鼠标 hover 识别门),但不挡角色走路
    特点:能被射线命中做交互判定,角色 / 物体不会被门板挡住
  3. Physics Only (No Query Collision)
    含义:仅物理刚体碰撞生效,射线查询完全失效
    门场景用途:静态房门几乎不用;仅带物理可碎门板、可推动门板会用到
    特点:角色会被门板阻挡,但鼠标射线无法选中、识别这个门组件
  4. Collision Enabled (Query and Physics)
    含义:完整开启碰撞,同时支持射线查询 + 物理阻挡,组件默认标准碰撞模式
    门场景用途:关门状态必备选项,关门后门板挡住角色,同时支持交互射线选中门
    特点:房门常规默认配置,兼顾通行阻挡和交互检测
  5. Probe Only (Contact Data, No Query or Physics Collision)
    含义:只触发接触事件(OnComponentBeginOverlap 重叠事件),无阻挡、无射线查询
    门场景用途:极少用,仅需要检测角色路过门洞触发事件、不需要阻挡和选中时使用
    特点:角色穿过会触发重叠回调,但挡不住人、也没法鼠标选中交互
  6. Query and Probe (Query Collision and Contact Data, No Physics Collision)
    含义:支持射线查询 + 重叠接触事件,无物理阻挡
    门场景用途:开门后想保留鼠标选中门 + 角色过门触发提示事件,又不阻挡通行
    特点:可交互选中、可检测角色重叠进门,角色不会被门板挡住

image
解锁boss门
解除碰撞, 然后删除组件.

image
打开箱子

image

物品移动向玩家然后销毁.

/Game/SoulslikeFramework/Blueprints/_WorldActors/Interactables/B_Ladder.B_Ladder

**

/Game/SoulslikeFramework/Blueprints/_WorldActors/LevelDesign/B_DeathTrigger.B_DeathTrigger

image

死亡触发区域:

image

拥有这个tag就被高damage杀死.

image

construction script:是做摆放用的.
self物品摆放的场景之后就会运行这个脚本进行配置.


文档
https://soulslike-framework.isik.vip/getting-started/quickstart/setup-locomotion-blendspaces
先把文档学了. 好像需要10个小时来学会.
先学会框架,然后再研究框架底层实现.

  1. 蒙太奇:
    notify state需要使用ANS_InputBuffer: 这种Input Buffer Notify 可以在触发时候让键盘输入无效化并且新输入写入buffer,这样才符合魂游的逻辑.
    image

ANS_InvincibilityFrame Notify State : 这个用来触发玩家无敌状态.

虚幻引擎蓝图断点完整教程(UE4/UE5 通用)
一、添加普通断点(最常用)

  1. 给单个节点打断点
    打开蓝图编辑器(关卡蓝图 / 角色蓝图 / 函数蓝图均可)
    右键任意执行节点(带白色箭头输入输出的节点)
    菜单选择:Add Breakpoint(添加断点)
    节点左上角出现红色圆点,代表断点生效

当前窗口的蓝图, 快速定位他在content browser里面的位置:
ctrl+b即可].

  1. 删除过场动画.
    改成下面这样就能跳过过长动画逻辑, 不播放过长动画
    image
    这个蓝图我是调试找到的. 目录里面没找到. 奇怪

  2. 自定义角色:
    image

左边对号是玩家属性, 右边是玩家的建模.

先把两个项目advanced combat system, 融合进这个soullike framework里面. 这两个里面都有特色. 融合一下.

ue里面添加素材的东西. 都要放到content/developes目录里面,然后打开
image
这样素材就可以不影响编译.

1. 查找函数.

这种cast to xxx的:
image

不存在这个函数定义.
只能看xxx的蓝图定义.
image
这样搜索就行.

compile打开, 方便调试

image

添加新的武器.

如何破解任意软件 - Daniel Hirsch

https://www.bilibili.com/video/BV13pMP6pEAG/?spm_id_from=333.1007.tianma.1-2-2.click&vd_source=d68ed178f151e80fea1e02efd205802c

objdump -s test

修框架bug:

PIE: Error: Blueprint Runtime Error: "Accessed None trying to read (real) property CallFunc_GetOwnerAnimInstance_AnimInstance in not an UClass". Node: Branch Graph: IsValid Function: Execute Ubergraph B Action Guard Start Blueprint: B_Action_GuardStart

  1. image

目前还是处决之后,玩家静止了,无法移动.

先不管bug, 继续看框架源码

/Game/SoulslikeFramework/Blueprints/AnimationRelated/Notifies/AN_AdjustStat.AN_AdjustStat

先看notify 动画的蓝图:

image
先是返回名字函数, 直接返回字符串的名字.

image
notify蓝图核心的逻辑要写在这个函数里面.
叫Received Notify.

/Game/SoulslikeFramework/Blueprints/AnimationRelated/Notifies/AN_AI_SpawnProjectile.AN_AI_SpawnProjectile

第二个,扔投掷物.

/Game/SoulslikeFramework/Blueprints/AnimationRelated/Notifies/ANS_WeaponTrace.ANS_WeaponTrace

看一下这个最核心的.!!!!!!!!!!!!!!!!!!!!!

/Game/SoulslikeFramework/Blueprints/Components/AC_ActionManager.AC_ActionManager

直接看component部分.

第一个action manager:

image

stamina loss:

image

带 f 的 Is Valid(纯函数)
只有蓝色对象输入引脚、绿色布尔返回引脚,没有 Exec 执行线引脚;
只能把结果给到 Branch、Compare Bool 等节点做判断,本身不能串联执行流程;
示例用法:把返回值塞进 Branch 的 Condition 做条件判断。
带?的 Is Valid(流程判断节点)
自带左侧 Exec 输入、右侧 Is Valid / Is Not Valid 两条执行输出引脚;
直接串联蓝图执行线,对象有效走右侧主线,无效走 Is Not Valid 分支做兜底、Return 终止流程;
日常蓝图空安全校验最常用,一步完成校验 + 分流。

/Game/SoulslikeFramework/Blueprints/Components/AC_AI_Boss.AC_AI_Boss
image

boss的二阶段.

image

object 的东西用的是

image

actor的东西用的是

spawn 来调用.

/Game/SoulslikeFramework/Blueprints/AnimationRelated/Notifies/ANS_InputBuffer.ANS_InputBuffer

/Game/SoulslikeFramework/Blueprints/Components/AC_InputBuffer.AC_InputBuffer

image

/Script/Engine.Blueprint'/Game/SoulslikeFramework/Blueprints/Components/AC_SaveLoadManager.AC_SaveLoadManager'

非常重要的保存加载.
主要结构是save Game entry

image

初始化状态.

widget 部分:

Animate Horizontally ✅勾选 开启横向 UV 自动滚动,画面水平持续移动

设置gamestarter 激活哪个人物蓝图:
image

修框架bug:

PIE: Error: Blueprint Runtime Error: "Accessed None trying to read (real) property CallFunc_GetOwnerAnimInstance_AnimInstance in not an UClass". Node: Branch Graph: IsValid Function: Execute Ubergraph B Action Guard Start Blueprint: B_Action_GuardStart

  1. image

目前还是处决之后,玩家静止了,无法移动.

image

先处理速度. 打开这个蓝图之后点graph

image

处决后

先进入这个蓝图:
image

调试的时候, 鼠标放在节点上看:
image

stat 是 属性
status 是状态,: 出血冻伤.

控制特殊状态的蓝图:
/Game/SoulslikeFramework/Data/StatusEffects/StatusEffectClasses/B_StatusEffect.B_StatusEffect

buildup 游戏战斗场景释义(适配你的魂类 Status 状态系统)
基础释义
buildup = 累积、叠层、逐步积攒进度,在动作 / 魂类游戏里专指异常值累积进度

How do I completely stop the Editor from making calls to URL https://www.google.com/generate_204 ?

https://forums.unrealengine.com/t/how-do-i-completely-stop-the-editor-from-making-calls-to-url-https-www-google-com-generate-204/2681843

框架改进优化:
https://soulslike-framework.isik.vip/updates/rigvm-packaging-issue-related-to-struct-conflicts

解决处决之后掉落地板的问题

我懂了, 就是这个disable root导致的. 因为我处决之后我又瞬间普工了一下. 触发了这个diable root. 瞬间就掉了

image
蒙太奇右边打开floor, 看角色是否z<0摔出地板.

我的改进:
image

下面测试5次.看看效果.

image

搞定了!!!!!!!!!!!!!!!!!!!!

还不对, 再试试/

LogInterchangeEngine: Error: [C:/Users/sdf/Desktop/basic_sucai/Combat Animations/SwordAttackCombo.FBX : '', AnimSequence] Animation length 3.529 is not compatible with import frame-rate 30 fps (sub frame 0.875). The animation has to be frame-border aligned if the 'Snap to Closest Frame Boundary' pipeline option is disabled.

LogInterchangeEngine: [Pending] Importing - Operation Completed.

LogInterchangeEngine: Error: [Failure] Import Failed

方法一:在 UE 导入设置中开启“自动吸附”(最快)
重新把 FBX 拖进引擎,在弹出的导入设置(Import Settings)窗口中:

展开 Animation 或 Pipeline 相关的高级选项。

找到 Snap to Closest Frame Boundary(吸附到最近的帧边界)这一项。

将其勾选(启用)。

重新点击导入。引擎会自动把那多出来的 0.875 帧微调对齐,允许成功导入。

下面我们处理存档的bug.

存档之后好像游戏没反应.
看看篝火逻辑进行debug

虚幻事件分发器教学

https://www.bilibili.com/video/BV1p3NjzmEQ2/?spm_id_from=333.40164.top_right_bar_window_default_collection.content.click

学习动画资产

  1. Skeleton
    所有针对这个角色的动画(动画序列、动画蒙太奇 AM_、动画蓝图)都必须绑定并依赖于这个骨骼资产才能正常播放。它定义了角色所有的关节、骨骼层级结构(比如脊椎、手臂、腿部骨骼节点)以及 Socket(插槽,用于挂载武器或特效)。

  2. skeleton mesh, pysics asset
    一个是骨骼上面的面片, 一个是物理碰撞的设置.

子蓝图问题:

空节点拦截了父类逻辑: 哪怕图表里只是摆了一个没有任何连线的空事件(比如 OnExecutionStarted),引擎也会认定你“重写”了它,并直接屏蔽父类写好的处决、锁 Z 轴和物理控制代码。 这么坑吗

先看原生的敌人设置:

image

image

选中创景中的敌人后.
设置参数.
第一个是
image

image
设置speed, 血量,

image
stance, 架势条.

image
攻击buff

image
攻击动画

image
ui
image
破防设置

image

行为树
下面跟教程再走一遍更细的设置:
https://soulslike-framework.isik.vip/workflow/creating-an-enemy

Loot Drop Manager

image

研究一下ai ability:
创建之后在:
/Game/SoulslikeFramework/Data/AI_Abilities/DA_AI_Ability_Myability.DA_AI_Ability_Myability

学习一下他的参数.

最后添加到enemy上:

image

高级: 自定义技能释放的规则:

该框架提供了两条规则——距离(FAiRuleDistance)和状态(FAiRuleStat)。这些规则是包含相关数据的结构体,位于/SoulslikeFramework/Structures/AI/Rules 目录下。

通过使用实例化结构,您可以创建一个包含相关数据的新结构,并调整AC_AI_CombatManager中的EvaluateAbilityRule()函数,从而创建自己的规则。

创建新的规则:

/Game/SoulslikeFramework/Structures/AI/Rules/ST_SLF_AiRuleStat.ST_SLF_AiRuleStat

调整AC_AI_CombatManager中的EvaluateAbilityRule()函数,从而创建自己的规则。

示例 2 - 输入读取规则

读指令的实现, 这个比较难.
这里面用的就是事件dispatcher.

学习Using Motion Warping

https://soulslike-framework.isik.vip/extending-functionality/using-motion-warping

相机臂的卡顿问题.

image

在 Soulslike 游戏开发中,通常有以下两种更合理的处理方式:

改变相机的检测通道(最推荐):
在相机臂(Spring Arm)的属性里,把 Probe Channel(探测通道) 从默认的 Camera 或 Visibility 改为专门的通道(或者在碰撞设置里,把角色胶囊体和敌人的胶囊体对 Camera 通道设置为 Ignore(忽略))。这样相机只会避开墙壁和地板,完全忽略角色和敌人,既不穿墙,贴身肉搏时镜头也不卡顿。

学些存档,读档:

image

ffloat 是啥

在虚幻引擎 C++ 代码规范中,首字母 F 代表这是一个 结构体(Struct)。所以 FFloat 本质上是一个用结构体(Struct)包裹起来的 Float 浮点数。

gameplay tags理解:

等于一个字典数据库?

非常精准!你的理解完全正确!

Gameplay Tag 配合底层存档系统的这一套逻辑,本质上就是一个基于 字典(Dictionary / Map / Key-Value 键值对)的轻量级数据库。

在这个“字典数据库”里,它们的角色分工是这样的:

Key(键 / 查找字典的单词):就是这个 Gameplay Tag(比如 SoulslikeFramework.Saving.MyNewVariable)。它在整个游戏里是独一无二的,用来当做索引。

Value(值 / 单词对应的解释):就是后面的 Instanced Struct 数据(被包装好的变量值)。

Database(数据库本体):就是框架里的 SaveGame 存档文件。它的底层数据结构通常就是一个 TMap<FGameplayTag, FInstancedStruct>(即以标签为 Key、实例化结构体为 Value 的字典)。

gameplay tag的添加:
搜不到这个myvariable啊

搜不到是因为在这一版虚幻引擎中,它隐藏在那个绿色加号后面。既然我们之前分析过它是“字典数据库”的 Key,那它现在在数据库里还不存在,必须由你来手动创建(新建)它。

请直接在当前弹出的这个窗口中,跟着我进行操作:

🛠️ 两步直接创建并选中它:
点击那个绿色的加号 +
看见搜索框左边那个绿色的 + 按钮了吗?直接用鼠标左键点击它。

在弹出的新窗口里输入名字
点击加号后会弹出一个叫“Add New Gameplay Tag”的小窗口:

Format text 如何长出引脚

怎么让它长出下面那个绿色的 value 引脚?
刚召唤出来的 Format Text 节点默认是没有任何输入引脚的。

你需要在它的 Format 输入框里打字输入:MyVariable loaded! Value = {value}

关键点:文字里必须要包含大括号 {},括号里面的名字(比如 value)就是引脚的名字。

输入完敲击回车,节点下方就会自动魔术般地长出那个绿色的 value 引脚了!接着把你的变量连上去就大功告成。

虚幻几大获取信息函数

Get Controller (获取自身控制器)

它是谁的函数:它是 Pawn(或 Character) 类内部特有的函数。

干什么用:获取当前这个 Pawn 正在被谁控制。

返回值:Controller 基类对象(可能是 PlayerController 玩家控制器,也可能是 AIController AI控制器)。

大白话理解:你在角色蓝图里用它,就代表“控制我(当前这个身体)的那个大脑是谁?”。如果这个角色是玩家,它拿到玩家控制器;如果是怪物,它拿到 AI 控制器。

Get Player Controller (获取玩家控制器)

它是谁的函数:它是一个全局静态函数,在任何蓝图里都能搜到。

干什么用:通过索引 ID 直接去世界里抓取某个玩家的控制器。

参数 Player Index:默认是 0(代表本地第一个玩家)。在单机游戏里,0 就代表唯一的玩家。如果是本地双人同屏(如《双人成行》),才会有 1。

大白话理解:不管你在哪个蓝图里(甚至在一个莫得灵魂的石头、或者UI里),只要调用它并传个 0,它就会直接把地图里唯一的那个主角玩家的大脑(PlayerController)给你揪出来。

添加新种类的武器动画

https://soulslike-framework.isik.vip/extending-functionality/extending-weapon-animsets

Resetting Enemies After Resting

写度盘逻辑

Get Actor Transform(获取整个演员的坐标)
操作对象:只能对 Actor(场景中的独立个体,比如玩家、敌人、一把插在世界里的宝箱)使用。

返回结果:返回这个 Actor 的 根组件(Root Component) 在世界坐标系下的 Transform。

大白话理解:比如你的主角蓝图(Actor)里有胶囊体、有狐狸模型、有武器模型。当你调用 Get Actor Transform 时,拿到的就是以胶囊体(根组件)为基准的整个人在地图上的绝对位置。你没法用它去单独拿主角右手或者衣服的坐标。

Get World Transform(获取某个具体零件的绝对坐标)
操作对象:只能对 Scene Component(场景组件) 使用(比如 Actor 内部的 Mesh、StaticMesh、Camera、Arrow 等组件)。

返回结果:返回这一个具体组件在世界坐标系下的绝对 Transform(它已经自动把 Actor 自身的位置以及组件的相对偏移全部叠加计算好了)。

大白话理解:你的主角在跑动并挥剑,你想知道剑尖此时此刻在地图上的什么位置(比如要生成个火花特效)。这时候你就不能用 Actor Transform,而是要拉出武器的 Mesh 组件,调用 Get World Transform,就能精准拿到这把武器在世界里的绝对坐标

guid:
00000000-0000-0000-0000-000000000000

Snap to Target 挂载后子组件直接匹配父组件 / 插槽的世界位姿,自身原有世界位置、旋转、缩放直接覆盖重置,完全贴合父节点
Keep Relative 保留挂载前子组件相对父组件的偏移值,挂载后维持原有相对位置,不会强行对齐父原点
Keep World 挂载后子组件保持自身当前世界坐标不变,父子层级绑定,但子组件位置不跟随父组件初始位姿变动

Sweep(碰撞扫描,当前未勾选)
关闭(当前状态):直接瞬移到目标坐标,全程不做碰撞检测,物体可以穿墙、嵌入地形 / 其他模型内部,不会阻挡位移。
开启勾选:物体从当前位置移动到新位置时,沿途做碰撞扫描,碰到碰撞实体就会停下,禁止穿模;碰撞详情会输出到右侧Sweep Hit Result。

Teleport(瞬移,当前已勾选✅)
专门针对开启了 Simulate Physics(物理模拟)的刚体组件:
✅勾选 Teleport:物理刚体瞬间跳转目标位置,不会产生位移速度、不会触发物理惯性、不会因为长距离瞬移出现物理抖动 / 飞脱、不会被物理引擎修正位置。
❌取消勾选:带物理模拟的物体长距离位移会被物理引擎判定为高速移动,产生冲量、甩飞、位置回弹、物理错乱,日常物理物体位移强烈建议保持勾选。

换地图. 我目前怀疑我地面处决之后穿模因为地图原因. 因为这个框架自带的地图是动态生成的.不是静态纯在的.

完全可以!只要是高版本(5.7)去用低版本(5.4)的模型资源,99% 的情况下都是一路畅通的。

虚幻引擎在资产兼容性上一直遵循 “向下兼容(Forward Compatibility)” 的原则——即高版本引擎可以完美读取和升级低版本引擎做出来的基础资产(如模型、贴图、材质)。

不过,在具体操作和后续处理上,有几个细节你需要注意:

  1. 怎么把 5.4 的资源弄进 5.7?
    由于 Fab 或商城里的插件/资源包可能还没来得及标上“支持 5.7”的标签,你在下载时可能会遇到无法直接添加到 5.7 项目的情况。

解决方法:在 Fab/Launcher 资产库里点击“添加到项目”时,如果找不到你的 5.7 项目,勾选 “显示所有项目”。
然后选中你的 5.7 项目,并在版本下拉菜单中手动选择 5.4(或者当前能选的最高版本,比如 5.5 或 5.6)。虚幻会强制把资产塞进去,项目升级时会自动把它们转换成 5.7 格式。
2. 迁移(Migrate)大法
如果你觉得强制添加不放心,也可以先用 5.4 引擎建一个空白项目,把 Fab 的模型放进去,然后使用虚幻标准的 Migrate(迁移) 功能:

在 5.4 项目的内容浏览器里,右键点击模型资产的文件夹。
选择 Asset Actions \(\rightarrow\) Migrate...。
把目标路径选为你 5.7 项目的 Content 文件夹。这样拷贝过去的资产极其干净,且不容易出错。
3. 变成 5.7 之后需要注意什么?(潜在的小坑)
虽然模型(Mesh)和贴图(Texture)绝对不会坏,但有两点在 5.7 中可能会因为底层渲染器的升级而产生视觉变化:

材质(Materials)可能需要微调:5.4 到 5.7 期间,虚幻对 Lumen、基色(Base Color)冷暖色调优化、以及 Subsurface(次表面散射)的计算进行过底层微调。如果模型使用了特别复杂的着色器(比如带有很多特殊连线的皮肤、玻璃或特殊发光材质),升级到 5.7 后可能会显得比在 5.4 里更亮或更暗一些,需要你进材质球微调一下参数。
骨骼模型(Skeletal Mesh)的重定向:如果这个模型是带骨骼的(比如怪物的角色模型),5.4 和 5.7 的 IK Rig / IK Retargeter(IK重定向系统)界面和底层有一些小重构。资源包里自带的重定向资产在 5.7 里可能会报错,你可能需要自己在 5.7 里重新创建一下 IK Rig 来做动画重定向。
一句话总结: 放心下载!模型本身在 5.7 里用起来嘎嘎香,万一材质变样了,顺着连线调一调贴图强度就行。

posted on 2026-06-30 10:32  张博的博客  阅读(29)  评论(0)    收藏  举报

导航