Initialize PHY Codex workflow
This commit is contained in:
20
.gitattributes
vendored
Normal file
20
.gitattributes
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Unreal binary assets
|
||||||
|
*.uasset filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.umap filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ubulk filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.uexp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.uptnl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
|
# Common large source assets
|
||||||
|
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obj filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.wav filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ogg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mov filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tga filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.exr filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.psd filter=lfs diff=lfs merge=lfs -text
|
||||||
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Unreal build output
|
||||||
|
Binaries/
|
||||||
|
DerivedDataCache/
|
||||||
|
Intermediate/
|
||||||
|
Saved/
|
||||||
|
|
||||||
|
# Project content policy: only track Content/AGame and its children.
|
||||||
|
Content/*
|
||||||
|
!Content/AGame/
|
||||||
|
!Content/AGame/**
|
||||||
|
|
||||||
|
# Visual Studio and Rider
|
||||||
|
.vs/
|
||||||
|
.idea/
|
||||||
|
*.sln.DotSettings.user
|
||||||
|
*.VC.db
|
||||||
|
*.VC.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.rsuser
|
||||||
|
|
||||||
|
# Unreal local files
|
||||||
|
*.tmp
|
||||||
|
*.log
|
||||||
|
*.pid
|
||||||
|
*.sublime-workspace
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
Thumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
.DS_Store
|
||||||
19
.vsconfig
Normal file
19
.vsconfig
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"components": [
|
||||||
|
"Component.Unreal.Debugger",
|
||||||
|
"Component.Unreal.Ide",
|
||||||
|
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.14.44.17.14.ATL",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.14.44.17.14.x86.x64",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||||
|
"Microsoft.VisualStudio.Component.Windows11SDK.22621",
|
||||||
|
"Microsoft.VisualStudio.Workload.CoreEditor",
|
||||||
|
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||||
|
"Microsoft.VisualStudio.Workload.NativeDesktop",
|
||||||
|
"Microsoft.VisualStudio.Workload.NativeGame"
|
||||||
|
]
|
||||||
|
}
|
||||||
72
AGENTS.md
Normal file
72
AGENTS.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# PHY Codex 工作协议
|
||||||
|
|
||||||
|
## 项目原则
|
||||||
|
- 项目以 C++ 和配置文件为主要实现手段,优先级固定为:`C++` > `项目配置文件` > `DataAsset` > `蓝图/编辑器装配`。
|
||||||
|
- 只有插件强制要求、动画/UI 资产装配、或无法用 C++/配置表达时,才允许使用蓝图或 DataAsset;使用时必须在交付说明里写明原因。
|
||||||
|
- 项目按多人优先设计:战斗、交互、背包、效果触发默认考虑 Server authority、复制、预测或回滚风险。
|
||||||
|
- 首期平台目标为 Win64 / UE 5.7。`AuroraDevs_UGC` 当前只声明 Win64,因此不要承诺其他平台可用。
|
||||||
|
- Marketplace 插件源码只允许读取和适配,不直接修改 Engine 下的插件文件。
|
||||||
|
- Git 远程仓库固定为 `https://git.codable.cn/cit110/PHY.git`。
|
||||||
|
- `Content` 目录只管理 `Content/AGame` 及其子文件;`Content/Collections`、`Content/Developers` 等其他目录默认不纳入版本控制。
|
||||||
|
- 每次完成修改并通过对应验证后,必须提交并推送到 `origin`;如果远程认证或冲突阻塞推送,必须在最终汇报中说明。
|
||||||
|
|
||||||
|
## 插件源码位置
|
||||||
|
- Generic Combat System:`D:\ue\UE_5.7\Engine\Plugins\Marketplace\GenericCd51b9e2c8181V4`
|
||||||
|
- Runtime 模块:`GenericInputSystem`、`GenericGameplayAbilities`、`GenericGameplayAttributes`、`GenericCombatSystem`
|
||||||
|
- Generic Game System:`D:\ue\UE_5.7\Engine\Plugins\Marketplace\GenericG08270e38e585V5`
|
||||||
|
- Runtime 模块:`GenericEffectsSystem`、`GenericCameraSystem`、`GenericUISystem`、`GenericGameSystem`
|
||||||
|
- Generic Inventory System:`D:\ue\UE_5.7\Engine\Plugins\Marketplace\GenericI359982083d7bV3`
|
||||||
|
- Runtime 模块:`GenericInventorySystem`
|
||||||
|
- Smooth Locomotion System:`D:\ue\UE_5.7\Engine\Plugins\Marketplace\SmoothLo6fa0c61bf7bdV5`
|
||||||
|
- Runtime 模块:`SLSCore`、`SmoothLocomotionSystem`、`TraversalSystem`、`FootStepSystem`、`SLSIntegration`、`SLSCameraModeSystem` 等
|
||||||
|
- Ultimate Gameplay Camera:`D:\ue\UE_5.7\Engine\Plugins\Marketplace\Ultimate683e2e68927aV34`
|
||||||
|
- Runtime 模块:`AuroraDevs_UGC`
|
||||||
|
|
||||||
|
## Agent 职责和汇报链
|
||||||
|
- 总架构/协调 Agent 是唯一总负责人,直接向用户汇报;所有专家向它汇报。它负责接口边界、任务拆分、跨系统决策、合并顺序、是否允许使用蓝图/DataAsset。
|
||||||
|
- 相机专家向总架构汇报。主责 `AuroraDevs_UGC`、战斗锁定/瞄准/移动相机状态;不得主动引入 `GenericCameraSystem` 或 `SLSCameraModeSystem` 作为玩法层依赖。
|
||||||
|
- 战斗/GAS 专家向总架构汇报。主责 ASC、Ability、Attribute、GameplayTag、GameplayCue、伤害、复制、预测。
|
||||||
|
- 输入专家向总架构汇报。主责 `GenericInputSystem`、`EnhancedInput`、输入到 GAS/UGC/运动/UI 的路由。
|
||||||
|
- 运动专家向总架构汇报。主责 `SmoothLocomotionSystem`、`SLSCore`、`TraversalSystem`、`SLSIntegration`、`FootStepSystem`;运动状态只通过项目接口通知相机。
|
||||||
|
- UI 专家向总架构汇报。主责 `GenericUISystem`、`CommonUI`、UMG、HUD、输入模式切换。
|
||||||
|
- 背包专家向总架构汇报。主责 `GenericInventorySystem`、物品、装备、拾取、战斗/UI 联动。
|
||||||
|
- 交互/效果专家向总架构汇报。主责 `GenericGameSystem`、`GenericEffectsSystem`、`SmartObjects`、`TargetingSystem`、Niagara。
|
||||||
|
- 验证 Agent 向总架构汇报,但拥有阻断权;构建、测试、多人验证失败时不得合并。
|
||||||
|
- Git/仓库 Agent 向总架构汇报;只在验证通过后处理提交、分支、LFS、忽略规则。
|
||||||
|
|
||||||
|
## 工作流
|
||||||
|
- 用户需求先交给总架构 Agent;总架构拆成单系统任务或跨系统任务,并指定唯一 owner。
|
||||||
|
- 专家进入实现前先读项目源码、配置和对应插件源码;不得直接修改 Engine Marketplace 插件源码。
|
||||||
|
- 专家方案必须说明 C++ 接口、配置文件、是否需要蓝图/DataAsset、多人影响、依赖模块。
|
||||||
|
- 单系统任务由 owner 完成;跨系统任务由总架构先定接口,再分派给对应专家,避免互相改同一批文件。
|
||||||
|
- 专家交付必须包含:`改动范围`、`新增/修改接口`、`配置文件`、`蓝图/DataAsset 使用原因`、`验证结果`、`遗留风险`。
|
||||||
|
- 验证 Agent 通过构建和必要测试后,Git/仓库 Agent 才能提交;总架构最终向用户汇报结果。
|
||||||
|
- Git/仓库 Agent 初始化仓库时必须设置 `origin=https://git.codable.cn/cit110/PHY.git`,启用 Git LFS,并确认 `Content` 跟踪范围仅限 `Content/AGame/**`。
|
||||||
|
- Git/仓库 Agent 在每次修改完成后负责提交并推送当前改动,不保留已完成但未提交的工作树。
|
||||||
|
- 相机/输入/运动/战斗之间的接口冲突、是否使用蓝图/DataAsset、是否引入插件模块依赖,统一由总架构裁决。
|
||||||
|
|
||||||
|
## 相机规则
|
||||||
|
- 项目相机主入口统一使用 Ultimate Gameplay Camera,即 `AuroraDevs_UGC`。
|
||||||
|
- `GenericCameraSystem` 和 `SLSCameraModeSystem` 只允许作为插件内部依赖、示例资产参考或薄适配层依赖;项目玩法层尽可能不用。
|
||||||
|
- 相机状态由项目级接口接收输入、运动和战斗状态,不允许业务代码到处直接耦合多个相机系统。
|
||||||
|
|
||||||
|
## C++ 和配置规则
|
||||||
|
- 配置按功能拆分,不把项目自定义设置堆进一个 ini。
|
||||||
|
- 项目自有设置使用 `UCLASS(Config=PHYCombat, DefaultConfig)` 这类配置类,对应 `Config/DefaultPHYCombat.ini`。
|
||||||
|
- UE 引擎强制读取的内容仍放在标准文件中,例如 `DefaultEngine.ini`、`DefaultInput.ini`、`DefaultGame.ini`;项目玩法参数尽量迁移到功能专属配置类。
|
||||||
|
- 建议功能配置文件:`DefaultPHYCore.ini`、`DefaultPHYInput.ini`、`DefaultPHYCombat.ini`、`DefaultPHYCamera.ini`、`DefaultPHYLocomotion.ini`、`DefaultPHYUI.ini`、`DefaultPHYInventory.ini`、`DefaultPHYInteraction.ini`、`DefaultPHYEffects.ini`。
|
||||||
|
- `.h` 文件注释使用符合 Doxygen 风格的中文注释:公开类、结构体、枚举、函数、属性使用 `/** ... */`,需要时使用 `@brief`、`@param`、`@return`。
|
||||||
|
- `.cpp` 文件也使用中文注释,但不用 Doxygen 风格;避免在实现文件里写 `/** ... */` 形式的 API 文档。
|
||||||
|
- 包含 `*.generated.h` 的头文件,其对应 `.cpp` 必须在包含自身头文件后使用 `#include UE_INLINE_GENERATED_CPP_BY_NAME(文件基名)`。
|
||||||
|
- 反射声明禁止 `ClassGroup`,也禁止在 `meta=(...)` 中写 class 分组。
|
||||||
|
- Gameplay Tags 全部使用 Native Gameplay Tags 宏,按功能域拆分到 `Source/PHY/Public/GameplayTags` 和 `Source/PHY/Private/GameplayTags`;`PHYGameplayTags.h` 只作为聚合入口,不直接堆放声明。
|
||||||
|
- 新增 Gameplay Tag 时按职责放入对应领域文件,例如输入、状态、能力、事件、效果;如果领域不匹配,先新增清晰命名的领域文件,不把所有 Tag 写在一个文件里。
|
||||||
|
- 核心 Tag 禁止只写在 ini、蓝图字符串或裸字符串里。
|
||||||
|
|
||||||
|
## 验证命令
|
||||||
|
- 基线构建:
|
||||||
|
`D:\ue\UE_5.7\Engine\Build\BatchFiles\Build.bat PHYEditor Win64 Development -Project="D:\ue\Projects\PHY\PHY.uproject" -WaitMutex -NoHotReloadFromIDE`
|
||||||
|
- Git 验证:`git status --short --branch` 不应显示 `Binaries`、`Intermediate`、`Saved`、`DerivedDataCache`。
|
||||||
|
- 代码审查:检查中文注释、Doxygen 规则、`UE_INLINE_GENERATED_CPP_BY_NAME`、反射 metadata、Native GameplayTags。
|
||||||
|
- 相机验证:UGC 能响应移动、战斗锁定、瞄准、UI 输入模式;业务层不得新增 `GenericCameraSystem` / `SLSCameraModeSystem` 直接依赖。
|
||||||
|
- 多人验证:战斗、输入、交互、背包、效果改动至少做双客户端 PIE 或 dedicated server smoke test。
|
||||||
0
Config/DefaultEditor.ini
Normal file
0
Config/DefaultEditor.ini
Normal file
161
Config/DefaultEngine.ini
Normal file
161
Config/DefaultEngine.ini
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
|
GameDefaultMap=/Game/AGame/Map/Map_Test.Map_Test
|
||||||
|
EditorStartupMap=/Game/AGame/Map/Map_Test.Map_Test
|
||||||
|
|
||||||
|
[/Script/Engine.RendererSettings]
|
||||||
|
r.AllowStaticLighting=False
|
||||||
|
|
||||||
|
r.GenerateMeshDistanceFields=True
|
||||||
|
|
||||||
|
r.DynamicGlobalIlluminationMethod=1
|
||||||
|
|
||||||
|
r.ReflectionMethod=1
|
||||||
|
|
||||||
|
r.SkinCache.CompileShaders=True
|
||||||
|
|
||||||
|
r.RayTracing=True
|
||||||
|
|
||||||
|
r.RayTracing.RayTracingProxies.ProjectEnabled=True
|
||||||
|
|
||||||
|
r.Substrate=True
|
||||||
|
|
||||||
|
r.Substrate.ProjectGBufferFormat=0
|
||||||
|
|
||||||
|
r.Shadow.Virtual.Enable=1
|
||||||
|
|
||||||
|
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
||||||
|
|
||||||
|
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
|
||||||
|
|
||||||
|
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
|
||||||
|
|
||||||
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
-D3D12TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D12TargetedShaderFormats=PCD3D_SM6
|
||||||
|
-D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
Compiler=Default
|
||||||
|
AudioSampleRate=48000
|
||||||
|
AudioCallbackBufferFrameSize=1024
|
||||||
|
AudioNumBuffersToEnqueue=1
|
||||||
|
AudioMaxChannels=0
|
||||||
|
AudioNumSourceWorkers=4
|
||||||
|
SpatializationPlugin=
|
||||||
|
SourceDataOverridePlugin=
|
||||||
|
ReverbPlugin=
|
||||||
|
OcclusionPlugin=
|
||||||
|
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
|
||||||
|
CacheSizeKB=65536
|
||||||
|
MaxChunkSizeOverrideKB=0
|
||||||
|
bResampleForDevice=False
|
||||||
|
MaxSampleRate=48000.000000
|
||||||
|
HighSampleRate=32000.000000
|
||||||
|
MedSampleRate=24000.000000
|
||||||
|
LowSampleRate=12000.000000
|
||||||
|
MinSampleRate=8000.000000
|
||||||
|
CompressionQualityModifier=1.000000
|
||||||
|
AutoStreamingThreshold=0.000000
|
||||||
|
SoundCueCookQualityIndex=-1
|
||||||
|
|
||||||
|
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
|
||||||
|
-TargetedRHIs=SF_VULKAN_SM5
|
||||||
|
+TargetedRHIs=SF_VULKAN_SM6
|
||||||
|
|
||||||
|
[/Script/MacTargetPlatform.MacTargetSettings]
|
||||||
|
-TargetedRHIs=SF_METAL_SM5
|
||||||
|
+TargetedRHIs=SF_METAL_SM6
|
||||||
|
|
||||||
|
[/Script/HardwareTargeting.HardwareTargetingSettings]
|
||||||
|
TargetedHardwareClass=Desktop
|
||||||
|
AppliedTargetedHardwareClass=Desktop
|
||||||
|
DefaultGraphicsPerformance=Maximum
|
||||||
|
AppliedDefaultGraphicsPerformance=Maximum
|
||||||
|
|
||||||
|
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
|
||||||
|
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
|
||||||
|
|
||||||
|
[/Script/Engine.UserInterfaceSettings]
|
||||||
|
bAuthorizeAutomaticWidgetVariableCreation=False
|
||||||
|
FontDPIPreset=Standard
|
||||||
|
FontDPI=72
|
||||||
|
|
||||||
|
[/Script/Engine.Engine]
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/PHY")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/PHY")
|
||||||
|
|
||||||
|
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
|
||||||
|
bEnablePlugin=True
|
||||||
|
bAllowNetworkConnection=True
|
||||||
|
SecurityToken=29325E42430BEA3414A72C80FBF480D7
|
||||||
|
bIncludeInShipping=False
|
||||||
|
bAllowExternalStartInShipping=False
|
||||||
|
bCompileAFSProject=False
|
||||||
|
bUseCompression=False
|
||||||
|
bLogFiles=False
|
||||||
|
bReportStats=False
|
||||||
|
ConnectionType=USBOnly
|
||||||
|
bUseManualIPAddress=False
|
||||||
|
ManualIPAddress=
|
||||||
|
|
||||||
|
[/Script/Engine.CollisionProfile]
|
||||||
|
-Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False)
|
||||||
|
-Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.",bCanModify=False)
|
||||||
|
-Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ",bCanModify=False)
|
||||||
|
-Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldStatic",Response=ECR_Block),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.",bCanModify=False)
|
||||||
|
-Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.",bCanModify=False)
|
||||||
|
-Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors",bCanModify=False)
|
||||||
|
-Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors",bCanModify=False)
|
||||||
|
-Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.",bCanModify=False)
|
||||||
|
-Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.",bCanModify=False)
|
||||||
|
-Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.",bCanModify=False)
|
||||||
|
-Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.",bCanModify=False)
|
||||||
|
-Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.",bCanModify=False)
|
||||||
|
-Profiles=(Name="UI",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Block),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ",bCanModify=False)
|
||||||
|
+Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision")
|
||||||
|
+Profiles=(Name="BlockAll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=,HelpMessage="WorldStatic object that blocks all actors by default. All new custom channels will use its own default response. ")
|
||||||
|
+Profiles=(Name="OverlapAll",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
|
||||||
|
+Profiles=(Name="BlockAllDynamic",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=,HelpMessage="WorldDynamic object that blocks all actors by default. All new custom channels will use its own default response. ")
|
||||||
|
+Profiles=(Name="OverlapAllDynamic",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that overlaps all actors by default. All new custom channels will use its own default response. ")
|
||||||
|
+Profiles=(Name="IgnoreOnlyPawn",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that ignores Pawn and Vehicle. All other channels will be set to default.")
|
||||||
|
+Profiles=(Name="OverlapOnlyPawn",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Pawn",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that overlaps Pawn, Camera, and Vehicle. All other channels will be set to default. ")
|
||||||
|
+Profiles=(Name="Pawn",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object. Can be used for capsule of any playerable character or AI. ")
|
||||||
|
+Profiles=(Name="Spectator",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="WorldStatic"),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore)),HelpMessage="Pawn object that ignores all other actors except WorldStatic.")
|
||||||
|
+Profiles=(Name="CharacterMesh",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="Pawn",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Pawn object that is used for Character Mesh. All other channels will be set to default.")
|
||||||
|
+Profiles=(Name="PhysicsActor",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=,HelpMessage="Simulating actors")
|
||||||
|
+Profiles=(Name="Destructible",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Destructible",CustomResponses=,HelpMessage="Destructible actors")
|
||||||
|
+Profiles=(Name="InvisibleWall",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldStatic object that is invisible.")
|
||||||
|
+Profiles=(Name="InvisibleWallDynamic",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore)),HelpMessage="WorldDynamic object that is invisible.")
|
||||||
|
+Profiles=(Name="Trigger",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldDynamic object that is used for trigger. All other channels will be set to default.")
|
||||||
|
+Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.")
|
||||||
|
+Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.")
|
||||||
|
+Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
|
||||||
|
+Profiles=(Name="TraversalMantleCollision",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="Default TraversalMantleCollision Profile (Created by Smooth Locomotion System -> TraversalSystem Plugin)")
|
||||||
|
+Profiles=(Name="WaterBodyCollision",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="",CustomResponses=((Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="Default Water Collision Profile (Created by Water Plugin)")
|
||||||
|
-ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall")
|
||||||
|
-ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn")
|
||||||
|
-ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic")
|
||||||
|
-ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor")
|
||||||
|
-ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic")
|
||||||
|
+ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall")
|
||||||
|
+ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn")
|
||||||
|
+ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic")
|
||||||
|
+ProfileRedirects=(OldName="SkeletalMeshActor",NewName="PhysicsActor")
|
||||||
|
+ProfileRedirects=(OldName="InvisibleActor",NewName="InvisibleWallDynamic")
|
||||||
|
-CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic")
|
||||||
|
-CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic")
|
||||||
|
-CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle")
|
||||||
|
-CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn")
|
||||||
|
+CollisionChannelRedirects=(OldName="Static",NewName="WorldStatic")
|
||||||
|
+CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic")
|
||||||
|
+CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle")
|
||||||
|
+CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn")
|
||||||
|
|
||||||
8
Config/DefaultGame.ini
Normal file
8
Config/DefaultGame.ini
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
[/Script/CommonUI.CommonUISettings]
|
||||||
|
CommonButtonAcceptKeyHandling=TriggerClick
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GeneralProjectSettings]
|
||||||
|
ProjectID=E7C26E1F4D195F0DBE49C2A3E5017988
|
||||||
|
CopyrightNotice=
|
||||||
|
|
||||||
84
Config/DefaultInput.ini
Normal file
84
Config/DefaultInput.ini
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
[/Script/Engine.InputSettings]
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||||
|
-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||||
|
bAltEnterTogglesFullscreen=True
|
||||||
|
bF11TogglesFullscreen=True
|
||||||
|
bUseMouseForTouch=False
|
||||||
|
bEnableMouseSmoothing=True
|
||||||
|
bEnableFOVScaling=True
|
||||||
|
bCaptureMouseOnLaunch=True
|
||||||
|
bEnableLegacyInputScales=True
|
||||||
|
bEnableMotionControls=True
|
||||||
|
bFilterInputByPlatformUser=False
|
||||||
|
bShouldFlushPressedKeysOnViewportFocusLost=True
|
||||||
|
bAlwaysShowTouchInterface=False
|
||||||
|
bShowConsoleOnFourFingerTap=True
|
||||||
|
bEnableGestureRecognizer=False
|
||||||
|
bUseAutocorrect=False
|
||||||
|
DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
|
||||||
|
DefaultViewportMouseLockMode=LockOnCapture
|
||||||
|
FOVScale=0.011110
|
||||||
|
DoubleClickTime=0.200000
|
||||||
|
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
|
||||||
|
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
|
||||||
|
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
|
||||||
|
-ConsoleKeys=Tilde
|
||||||
|
+ConsoleKeys=Tilde
|
||||||
|
|
||||||
5
Config/DefaultPHYCamera.ini
Normal file
5
Config/DefaultPHYCamera.ini
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[/Script/PHY.PHYCameraSettings]
|
||||||
|
bUseUltimateGameplayCamera=True
|
||||||
|
bAllowGenericCameraFallback=False
|
||||||
|
bAllowSLSCameraFallback=False
|
||||||
|
LockOnBlendTime=0.250000
|
||||||
4
Config/DefaultPHYCombat.ini
Normal file
4
Config/DefaultPHYCombat.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYCombatSettings]
|
||||||
|
bRequireServerAuthority=True
|
||||||
|
bEnableClientPrediction=True
|
||||||
|
DefaultHitConfirmWindow=0.200000
|
||||||
5
Config/DefaultPHYCore.ini
Normal file
5
Config/DefaultPHYCore.ini
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[/Script/PHY.PHYCoreSettings]
|
||||||
|
ConfigVersion=1
|
||||||
|
bMultiplayerFirst=True
|
||||||
|
bPreferCodeAndConfig=True
|
||||||
|
TargetPlatformName=Win64
|
||||||
4
Config/DefaultPHYEffects.ini
Normal file
4
Config/DefaultPHYEffects.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYEffectsSettings]
|
||||||
|
bUseGenericEffectsSystem=True
|
||||||
|
bReplicateGameplayCues=True
|
||||||
|
EffectCullDistance=5000.000000
|
||||||
4
Config/DefaultPHYInput.ini
Normal file
4
Config/DefaultPHYInput.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYInputSettings]
|
||||||
|
DefaultMappingPriority=0
|
||||||
|
bRouteInputThroughGenericInputSystem=True
|
||||||
|
bBlockGameplayInputWhenUIFocused=True
|
||||||
4
Config/DefaultPHYInteraction.ini
Normal file
4
Config/DefaultPHYInteraction.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYInteractionSettings]
|
||||||
|
bRequireServerConfirmedInteraction=True
|
||||||
|
InteractionTraceDistance=350.000000
|
||||||
|
bUseSmartObjects=True
|
||||||
4
Config/DefaultPHYInventory.ini
Normal file
4
Config/DefaultPHYInventory.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYInventorySettings]
|
||||||
|
bReplicateInventory=True
|
||||||
|
MaxQuickSlots=8
|
||||||
|
bAllowEquipmentGameplayEffects=True
|
||||||
4
Config/DefaultPHYLocomotion.ini
Normal file
4
Config/DefaultPHYLocomotion.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYLocomotionSettings]
|
||||||
|
bUseSmoothLocomotionSystem=True
|
||||||
|
bReplicateTraversalState=True
|
||||||
|
MaxSprintSpeed=650.000000
|
||||||
4
Config/DefaultPHYUI.ini
Normal file
4
Config/DefaultPHYUI.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[/Script/PHY.PHYUISettings]
|
||||||
|
bUseCommonUI=True
|
||||||
|
bOpenMenusWithGameplayPause=False
|
||||||
|
DefaultHUDLayerName=HUD
|
||||||
BIN
Content/AGame/Map/Map_Test.umap
LFS
Normal file
BIN
Content/AGame/Map/Map_Test.umap
LFS
Normal file
Binary file not shown.
50
PHY.uproject
Normal file
50
PHY.uproject
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"EngineAssociation": "5.7",
|
||||||
|
"Category": "",
|
||||||
|
"Description": "",
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "PHY",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Plugins": [
|
||||||
|
{
|
||||||
|
"Name": "ModelingToolsEditorMode",
|
||||||
|
"Enabled": true,
|
||||||
|
"TargetAllowList": [
|
||||||
|
"Editor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GenericCombatSystem",
|
||||||
|
"Enabled": true,
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/d4d45c2c-c698-4274-bb14-5474b7880a01"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GenericGameSystem",
|
||||||
|
"Enabled": true,
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/6904d4d1-c7af-4973-b10e-a88c4436dab5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GenericInventorySystem",
|
||||||
|
"Enabled": true,
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/9a9b6f10-4d4c-4897-90ec-809854653402"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SmoothLocomotionSystem",
|
||||||
|
"Enabled": true,
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/643ae212-8cfe-4238-bb56-c41"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AuroraDevs_UGC",
|
||||||
|
"Enabled": true,
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/291971d9abb1443897deb57e80731270",
|
||||||
|
"SupportedTargetPlatforms": [
|
||||||
|
"Win64"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
15
Source/PHY.Target.cs
Normal file
15
Source/PHY.Target.cs
Normal 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
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 下维护,本文件只负责聚合包含。
|
||||||
|
*/
|
||||||
15
Source/PHYEditor.Target.cs
Normal file
15
Source/PHYEditor.Target.cs
Normal 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");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user