Initialize PHY Codex workflow

This commit is contained in:
2026-04-25 23:43:40 +08:00
commit 5aacc79f03
38 changed files with 2804 additions and 0 deletions

15
Source/PHY.Target.cs Normal file
View File

@@ -0,0 +1,15 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.Collections.Generic;
public class PHYTarget : TargetRules
{
public PHYTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V6;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
ExtraModuleNames.Add("PHY");
}
}

23
Source/PHY/PHY.Build.cs Normal file
View 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
View 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
View File

@@ -0,0 +1,6 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"

View 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");
}

View File

@@ -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");
}

View 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");
}

View 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");
}

View 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");
}

View File

@@ -0,0 +1,7 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "PHYConfigSettings.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(PHYConfigSettings)
// 配置类仅承载默认值和 ini 绑定,具体玩法读取逻辑由各系统的项目包装层实现。

View 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);
}

View 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);
}

View 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);
}

View 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);
}

View 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);
}

View 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;
};

View 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 下维护,本文件只负责聚合包含。
*/

View File

@@ -0,0 +1,15 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System.Collections.Generic;
public class PHYEditorTarget : TargetRules
{
public PHYEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V6;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
ExtraModuleNames.Add("PHY");
}
}