可蓝图化的子系统v1.5

插件简介

本插件提供了六个可蓝图继承的子系统:

BPable_GameInstanceSubsystem

BPable_LocalPlayerSubsystem

BPable_WorldSubsystem

BPable_TickableGameInstanceSubsystem

BPable_TickableLocalPlayerSubsystem

BPable_TickableWorldSubsystem

可蓝图继承的子系统

图中Get到的BPable子系统的这种用法非法。因为图中的这几个Subsystem是插件提供的基类,任何情况下都不应该获取它。

当然,用图中的方式获取你的子系统蓝图类是可以的。

关于该插件的使用方法在下文。上图仅仅时展示作用

用户直接通过蓝图继承这些基类就可以获得蓝图子系统。

快速启用

这里以BPable_GameInstanceSubsystem为例

  • 打开项目的插件设置

  • 确保BlueprintableSubsystem插件启用

  • 在内容浏览器中创建蓝图类,并选取BPable_GameInstanceSubsystem为父类

  • 或者你可以在内容浏览器中右键>蓝图>Subsystems中快速创建子系统

  • 创建成功后打开你创建的游戏实例子系统蓝图类进行编辑

  • 在其他蓝图类中使用Get Subsystem通用节点调用你创建的蓝图子系统(注意,如果你在创建子系统并保存后,没有在其他蓝图中并不能获取到你创建的蓝图子系统蓝图的引用,请重新启动编辑器。之后就可以获取到相应的引用了)

蓝图子系统

一般使用说明

在蓝图类编辑窗口左侧我的蓝图中点击重载相应的函数

请勿在 事件Initialize 和 事件Deinitialize 中使用需要提前知道World的节点(如GetActorOfClass、Delay)。

​ 原因:Subsystem的 事件Initialize 和 事件Deinitialize 被执行时World尚未准备好或者在卸载中,所以此时执行诸如GetActorOfClass或Delay节点是无效的。

​ 建议:在除了 事件Initialize 和 事件Deinitialize 之外的其他事件中使用这类节点,诸如WorldBeginPlay、Tick或者自定义事件

游戏实例子系统蓝图类

  • 生命周期

    伴随其Outer,即UGameInstance

  • 接口

    名称 图示 解释
    Initialize 此子系统创建后调用的事件
    WorldBeginPlay 此World开始执行BeginPlay时调用的事件
    WorldBeginTearDown 此World开始执行TearDown时调用的事件
    Deinitialize 此子系统被GC标记销毁前调用的事件
    ShouldCreateSubsystem 此子系统创建前调用的函数,用于判断是否要创建该子系统单例。 可以不实现,不实现该接口时默认为创建。
    实现函数后,若返回值为false则不创建,若返回值为true则创建。请留意
  • 函数

    名称 图示 解释
    GetGameInstance 获取游戏实例子系统的Outer,即游戏实例UGameInstance对象

本地玩家子系统蓝图类

  • 生命周期

    伴随其Outer,即ULocalPlayer。

  • 接口

    名称 图示 解释
    Initialize 此子系统创建后调用的事件
    WorldBeginPlay 此World开始执行BeginPlay时调用的事件
    WorldBeginTearDown 此World开始执行TearDown时调用的事件
    Deinitialize 此子系统被GC标记销毁前调用的事件
    ShouldCreateSubsystem 此子系统创建前调用的函数,用于判断是否要创建该子系统单例。 可以不实现,不实现该接口时默认为创建。
    实现时,若返回值为false则不创建,若返回值为true则创建。请留意
  • 函数

    名称 图示 解释
    GetLocalPlayerController 通过本地玩家子系统的Outer,即ULocalPlayer,获取ULocalPlayer对应的APlayerController。
    执行Initialize时,这个节点返回值为null

场景子系统蓝图类

  • 生命周期

    伴随其Outer,即UWorld。仅在Game或PIE中生成

  • 接口

    名称 图示 解释
    Initialize 此子系统创建后调用的事件
    PostInitialize 此所有UWorldSubsystem调用Initialize后调用的事件
    WorldBeginPlay 此当World准备好开始Gameplay、Gamemode转换到正确状态前和调用所有的Actor的Beginplay前调用的事
    Deinitialize 此子系统被GC标记销毁前调用的事件
    ShouldCreateSubsystem 此子系统创建前调用的函数,用于判断是否要创建该子系统单例。 可以不实现,不实现该接口时默认为创建。
    实现时,若返回值为false则不创建,若返回值为true则创建。请留意
    WorldComponentsUpdated 屏幕截图 2023-05-19 163425 在世界组件(如所有关卡组件)被更新后被调用。
    UpdateStreamingState 屏幕截图 2023-05-19 163403 更新子系统所需的流送关卡(由world的UpdateStreamingState函数调用)。
  • 函数

名称 图示 解释
GetWorldSoftPtr 屏幕截图 2023-05-19 163434 获得世界子系统依赖的关卡

通用功能

有激活状态的子系统蓝图类

  • 功能概述

    一个独立的激活状态,不对Subsystem本身产生实质影响,提供给用户的布尔状态

  • 适用基类

    前缀是BPable的基类的子类

  • 类默认值

    名称 解释
    ActiveDefault 默认的激活状态
  • 函数

    名称 图示 解释
    IsActive 获取激活状态值
    Activate 激活,并广播激活
    参数bReset为真时,即使已经是激活的,仍会再激活一次。
    Deactivate 反激活
    ToggleActive 切换激活
    SetActive 屏幕截图 2022-11-17 205024 设置激活状态
    参数NewActive是要设置的新的值。
    参数Reset是否为重设激活
  • 委托

    名称 解释
    OnActivated(Object,Reset) 激活后执行的委托
    参数Object是分发委托的Subsystem的引用
    参数Reset是激活时是否重设的激活
    OnDeactivated(Object) 反激活后执行的委托
    参数Object是分发委托的Subsystem的引用

可Tick的子系统蓝图类

  • 功能概述

    有该功能子系统蓝图类可以随着每帧执行Tick事件。

    Tick事件会收到激活状态的影响。即使当前可以Tick,若未激活,则不执行Tick事件。

  • 适用基类

    前缀是BPable_Tickable的基类的子类

  • 类默认值

    名称 解释
    IsTickEnabled 是否启用Tick
    IsTickableThenPaused 是否在游戏暂停后启用Tick
  • 事件

    部分接口继承自UBPable_GameInstanceSubsystem,请在父类中查看相关内容

    名称 图示 解释
    Tick 启用了Tick后每帧调用的时间
  • 函数

    名称 图示 解释
    SetTickEnabled 设置是否启用Tick
    IsSubsystemTickEnabled 返回Tick启用的值
    SetTickableWhenPaused 设置是否当游戏暂停时Tick
    IsSubsystemTickableWhenPaused 返回是否在游戏暂停时Tick的值