Initialize PHY Codex workflow
This commit is contained in:
23
Source/PHY/PHY.Build.cs
Normal file
23
Source/PHY/PHY.Build.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class PHY : ModuleRules
|
||||
{
|
||||
public PHY(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GameplayTags" });
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(new string[] { });
|
||||
|
||||
// Uncomment if you are using Slate UI
|
||||
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
|
||||
|
||||
// Uncomment if you are using online features
|
||||
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
|
||||
|
||||
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
|
||||
}
|
||||
}
|
||||
6
Source/PHY/PHY.cpp
Normal file
6
Source/PHY/PHY.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "PHY.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, PHY, "PHY" );
|
||||
6
Source/PHY/PHY.h
Normal file
6
Source/PHY/PHY.h
Normal file
@@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
13
Source/PHY/Private/GameplayTags/PHYGameplayTags_Ability.cpp
Normal file
13
Source/PHY/Private/GameplayTags/PHYGameplayTags_Ability.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_Ability.h"
|
||||
|
||||
// 能力 Tag 由战斗/GAS 专家维护,新增时同步 Ability 输入绑定和多人语义。
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
UE_DEFINE_GAMEPLAY_TAG(Ability_Attack_Primary, "Ability.Attack.Primary");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Ability_Attack_Secondary, "Ability.Attack.Secondary");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Ability_Dodge, "Ability.Dodge");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Ability_Jump, "Ability.Jump");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Ability_Interact, "Ability.Interact");
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_Effect.h"
|
||||
|
||||
// 效果 Tag 由交互/效果专家维护,新增时同步表现复制策略。
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
UE_DEFINE_GAMEPLAY_TAG(Effect_Hit, "Effect.Hit");
|
||||
}
|
||||
10
Source/PHY/Private/GameplayTags/PHYGameplayTags_Event.cpp
Normal file
10
Source/PHY/Private/GameplayTags/PHYGameplayTags_Event.cpp
Normal file
@@ -0,0 +1,10 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_Event.h"
|
||||
|
||||
// 事件 Tag 用于系统间消息和 GAS Event,新增时避免与状态 Tag 混用。
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
UE_DEFINE_GAMEPLAY_TAG(Event_Combat_Hit, "Event.Combat.Hit");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Event_Interaction_Begin, "Event.Interaction.Begin");
|
||||
}
|
||||
18
Source/PHY/Private/GameplayTags/PHYGameplayTags_Input.cpp
Normal file
18
Source/PHY/Private/GameplayTags/PHYGameplayTags_Input.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_Input.h"
|
||||
|
||||
// 输入 Tag 由输入专家维护,新增 Tag 时必须同步输入路由和配置说明。
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Move, "Input.Move");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Look, "Input.Look");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Jump, "Input.Jump");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Sprint, "Input.Sprint");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Interact, "Input.Interact");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Attack_Primary, "Input.Attack.Primary");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Attack_Secondary, "Input.Attack.Secondary");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Aim, "Input.Aim");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_LockOn, "Input.LockOn");
|
||||
UE_DEFINE_GAMEPLAY_TAG(Input_Inventory_Toggle, "Input.Inventory.Toggle");
|
||||
}
|
||||
13
Source/PHY/Private/GameplayTags/PHYGameplayTags_State.cpp
Normal file
13
Source/PHY/Private/GameplayTags/PHYGameplayTags_State.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_State.h"
|
||||
|
||||
// 状态 Tag 是跨系统通信入口,新增前需要总架构确认语义边界。
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
UE_DEFINE_GAMEPLAY_TAG(State_Combat, "State.Combat");
|
||||
UE_DEFINE_GAMEPLAY_TAG(State_Aiming, "State.Aiming");
|
||||
UE_DEFINE_GAMEPLAY_TAG(State_LockedOn, "State.LockedOn");
|
||||
UE_DEFINE_GAMEPLAY_TAG(State_Interacting, "State.Interacting");
|
||||
UE_DEFINE_GAMEPLAY_TAG(State_UI_Open, "State.UI.Open");
|
||||
}
|
||||
7
Source/PHY/Private/PHYConfigSettings.cpp
Normal file
7
Source/PHY/Private/PHYConfigSettings.cpp
Normal file
@@ -0,0 +1,7 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "PHYConfigSettings.h"
|
||||
|
||||
#include UE_INLINE_GENERATED_CPP_BY_NAME(PHYConfigSettings)
|
||||
|
||||
// 配置类仅承载默认值和 ini 绑定,具体玩法读取逻辑由各系统的项目包装层实现。
|
||||
26
Source/PHY/Public/GameplayTags/PHYGameplayTags_Ability.h
Normal file
26
Source/PHY/Public/GameplayTags/PHYGameplayTags_Ability.h
Normal file
@@ -0,0 +1,26 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NativeGameplayTags.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 能力相关原生 Gameplay Tag。
|
||||
*/
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
/** @brief 主攻击能力。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Attack_Primary);
|
||||
|
||||
/** @brief 副攻击能力。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Attack_Secondary);
|
||||
|
||||
/** @brief 闪避能力。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Dodge);
|
||||
|
||||
/** @brief 跳跃能力。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Jump);
|
||||
|
||||
/** @brief 交互能力。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Ability_Interact);
|
||||
}
|
||||
14
Source/PHY/Public/GameplayTags/PHYGameplayTags_Effect.h
Normal file
14
Source/PHY/Public/GameplayTags/PHYGameplayTags_Effect.h
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NativeGameplayTags.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 效果相关原生 Gameplay Tag。
|
||||
*/
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
/** @brief 通用命中特效。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Effect_Hit);
|
||||
}
|
||||
17
Source/PHY/Public/GameplayTags/PHYGameplayTags_Event.h
Normal file
17
Source/PHY/Public/GameplayTags/PHYGameplayTags_Event.h
Normal file
@@ -0,0 +1,17 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NativeGameplayTags.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 事件相关原生 Gameplay Tag。
|
||||
*/
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
/** @brief 命中事件。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Event_Combat_Hit);
|
||||
|
||||
/** @brief 交互开始事件。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Event_Interaction_Begin);
|
||||
}
|
||||
41
Source/PHY/Public/GameplayTags/PHYGameplayTags_Input.h
Normal file
41
Source/PHY/Public/GameplayTags/PHYGameplayTags_Input.h
Normal file
@@ -0,0 +1,41 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NativeGameplayTags.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 输入相关原生 Gameplay Tag。
|
||||
*/
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
/** @brief 移动输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Move);
|
||||
|
||||
/** @brief 视角输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Look);
|
||||
|
||||
/** @brief 跳跃输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Jump);
|
||||
|
||||
/** @brief 冲刺输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Sprint);
|
||||
|
||||
/** @brief 交互输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Interact);
|
||||
|
||||
/** @brief 主攻击输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Attack_Primary);
|
||||
|
||||
/** @brief 副攻击输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Attack_Secondary);
|
||||
|
||||
/** @brief 瞄准输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Aim);
|
||||
|
||||
/** @brief 锁定目标输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_LockOn);
|
||||
|
||||
/** @brief 背包开关输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Input_Inventory_Toggle);
|
||||
}
|
||||
26
Source/PHY/Public/GameplayTags/PHYGameplayTags_State.h
Normal file
26
Source/PHY/Public/GameplayTags/PHYGameplayTags_State.h
Normal file
@@ -0,0 +1,26 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "NativeGameplayTags.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 状态相关原生 Gameplay Tag。
|
||||
*/
|
||||
namespace PHYGameplayTags
|
||||
{
|
||||
/** @brief 角色处于战斗状态。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(State_Combat);
|
||||
|
||||
/** @brief 角色处于瞄准状态。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(State_Aiming);
|
||||
|
||||
/** @brief 角色处于锁定目标状态。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(State_LockedOn);
|
||||
|
||||
/** @brief 角色正在执行交互。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(State_Interacting);
|
||||
|
||||
/** @brief UI 占用主要输入。 */
|
||||
UE_DECLARE_GAMEPLAY_TAG_EXTERN(State_UI_Open);
|
||||
}
|
||||
213
Source/PHY/Public/PHYConfigSettings.h
Normal file
213
Source/PHY/Public/PHYConfigSettings.h
Normal file
@@ -0,0 +1,213 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "UObject/Object.h"
|
||||
#include "PHYConfigSettings.generated.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 项目核心配置。
|
||||
*/
|
||||
UCLASS(Config=PHYCore, DefaultConfig)
|
||||
class PHY_API UPHYCoreSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 当前配置版本,用于后续迁移检查。 */
|
||||
UPROPERTY(Config)
|
||||
int32 ConfigVersion = 1;
|
||||
|
||||
/** @brief 是否默认按多人优先路径设计核心系统。 */
|
||||
UPROPERTY(Config)
|
||||
bool bMultiplayerFirst = true;
|
||||
|
||||
/** @brief 是否优先使用 C++ 和配置文件表达项目规则。 */
|
||||
UPROPERTY(Config)
|
||||
bool bPreferCodeAndConfig = true;
|
||||
|
||||
/** @brief 首期目标平台名称。 */
|
||||
UPROPERTY(Config)
|
||||
FName TargetPlatformName = TEXT("Win64");
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 输入系统配置。
|
||||
*/
|
||||
UCLASS(Config=PHYInput, DefaultConfig)
|
||||
class PHY_API UPHYInputSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 默认输入映射优先级。 */
|
||||
UPROPERTY(Config)
|
||||
int32 DefaultMappingPriority = 0;
|
||||
|
||||
/** @brief 是否通过 GenericInputSystem 路由 Gameplay 输入。 */
|
||||
UPROPERTY(Config)
|
||||
bool bRouteInputThroughGenericInputSystem = true;
|
||||
|
||||
/** @brief UI 聚焦时是否阻断 Gameplay 输入。 */
|
||||
UPROPERTY(Config)
|
||||
bool bBlockGameplayInputWhenUIFocused = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 战斗和 GAS 配置。
|
||||
*/
|
||||
UCLASS(Config=PHYCombat, DefaultConfig)
|
||||
class PHY_API UPHYCombatSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 战斗结果是否必须由服务端确认。 */
|
||||
UPROPERTY(Config)
|
||||
bool bRequireServerAuthority = true;
|
||||
|
||||
/** @brief 是否允许客户端预测能力表现。 */
|
||||
UPROPERTY(Config)
|
||||
bool bEnableClientPrediction = true;
|
||||
|
||||
/** @brief 默认命中确认窗口,单位为秒。 */
|
||||
UPROPERTY(Config)
|
||||
float DefaultHitConfirmWindow = 0.2f;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 相机配置。
|
||||
*/
|
||||
UCLASS(Config=PHYCamera, DefaultConfig)
|
||||
class PHY_API UPHYCameraSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 是否使用 Ultimate Gameplay Camera 作为主相机系统。 */
|
||||
UPROPERTY(Config)
|
||||
bool bUseUltimateGameplayCamera = true;
|
||||
|
||||
/** @brief 是否允许 GenericCameraSystem 作为玩法层备用方案。 */
|
||||
UPROPERTY(Config)
|
||||
bool bAllowGenericCameraFallback = false;
|
||||
|
||||
/** @brief 是否允许 SLSCameraModeSystem 作为玩法层备用方案。 */
|
||||
UPROPERTY(Config)
|
||||
bool bAllowSLSCameraFallback = false;
|
||||
|
||||
/** @brief 默认锁定目标相机混合时间,单位为秒。 */
|
||||
UPROPERTY(Config)
|
||||
float LockOnBlendTime = 0.25f;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 运动系统配置。
|
||||
*/
|
||||
UCLASS(Config=PHYLocomotion, DefaultConfig)
|
||||
class PHY_API UPHYLocomotionSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 是否使用 Smooth Locomotion System 作为主运动系统。 */
|
||||
UPROPERTY(Config)
|
||||
bool bUseSmoothLocomotionSystem = true;
|
||||
|
||||
/** @brief 是否复制特殊移动和穿越状态。 */
|
||||
UPROPERTY(Config)
|
||||
bool bReplicateTraversalState = true;
|
||||
|
||||
/** @brief 默认冲刺速度。 */
|
||||
UPROPERTY(Config)
|
||||
float MaxSprintSpeed = 650.0f;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY UI 配置。
|
||||
*/
|
||||
UCLASS(Config=PHYUI, DefaultConfig)
|
||||
class PHY_API UPHYUISettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 是否使用 CommonUI 承载主要 UI 流程。 */
|
||||
UPROPERTY(Config)
|
||||
bool bUseCommonUI = true;
|
||||
|
||||
/** @brief 打开菜单时是否暂停 Gameplay。 */
|
||||
UPROPERTY(Config)
|
||||
bool bOpenMenusWithGameplayPause = false;
|
||||
|
||||
/** @brief 默认 HUD 层名称。 */
|
||||
UPROPERTY(Config)
|
||||
FName DefaultHUDLayerName = TEXT("HUD");
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 背包配置。
|
||||
*/
|
||||
UCLASS(Config=PHYInventory, DefaultConfig)
|
||||
class PHY_API UPHYInventorySettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 是否复制背包状态。 */
|
||||
UPROPERTY(Config)
|
||||
bool bReplicateInventory = true;
|
||||
|
||||
/** @brief 默认快捷栏数量。 */
|
||||
UPROPERTY(Config)
|
||||
int32 MaxQuickSlots = 8;
|
||||
|
||||
/** @brief 装备变化是否允许触发 GameplayEffect。 */
|
||||
UPROPERTY(Config)
|
||||
bool bAllowEquipmentGameplayEffects = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 交互配置。
|
||||
*/
|
||||
UCLASS(Config=PHYInteraction, DefaultConfig)
|
||||
class PHY_API UPHYInteractionSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 交互是否必须由服务端确认。 */
|
||||
UPROPERTY(Config)
|
||||
bool bRequireServerConfirmedInteraction = true;
|
||||
|
||||
/** @brief 默认交互检测距离。 */
|
||||
UPROPERTY(Config)
|
||||
float InteractionTraceDistance = 350.0f;
|
||||
|
||||
/** @brief 是否允许使用 SmartObjects 承载复杂交互。 */
|
||||
UPROPERTY(Config)
|
||||
bool bUseSmartObjects = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief PHY 效果配置。
|
||||
*/
|
||||
UCLASS(Config=PHYEffects, DefaultConfig)
|
||||
class PHY_API UPHYEffectsSettings : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/** @brief 是否使用 GenericEffectsSystem 管理通用效果。 */
|
||||
UPROPERTY(Config)
|
||||
bool bUseGenericEffectsSystem = true;
|
||||
|
||||
/** @brief 是否通过 GameplayCue 复制关键战斗表现。 */
|
||||
UPROPERTY(Config)
|
||||
bool bReplicateGameplayCues = true;
|
||||
|
||||
/** @brief 默认效果裁剪距离。 */
|
||||
UPROPERTY(Config)
|
||||
float EffectCullDistance = 5000.0f;
|
||||
};
|
||||
16
Source/PHY/Public/PHYGameplayTags.h
Normal file
16
Source/PHY/Public/PHYGameplayTags.h
Normal file
@@ -0,0 +1,16 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "GameplayTags/PHYGameplayTags_Ability.h"
|
||||
#include "GameplayTags/PHYGameplayTags_Effect.h"
|
||||
#include "GameplayTags/PHYGameplayTags_Event.h"
|
||||
#include "GameplayTags/PHYGameplayTags_Input.h"
|
||||
#include "GameplayTags/PHYGameplayTags_State.h"
|
||||
|
||||
/**
|
||||
* @brief PHY 项目的原生 Gameplay Tag 聚合入口。
|
||||
*
|
||||
* 具体 Tag 必须按功能域拆分到 Source/PHY/Public/GameplayTags 和
|
||||
* Source/PHY/Private/GameplayTags 下维护,本文件只负责聚合包含。
|
||||
*/
|
||||
Reference in New Issue
Block a user