vault backup: 2026-05-03 21:38:46
This commit is contained in:
@@ -44,14 +44,44 @@ Shader (View.BGMultColor, View.DisasterPosition, ...)
|
||||
|
||||
`DisasterPosition`、`DisasterWind`、`DisasterQuake` 三个参数用于格斗游戏中的必杀技演出——场景因攻击而震动、风吹、变形等效果,由 Shader 读取这些参数来驱动场景顶点动画和粒子。
|
||||
|
||||
## 完整代码解析
|
||||
|
||||
```cpp
|
||||
// REDSceneContext.h — 全局 Shader 数据管线
|
||||
UCLASS()
|
||||
class UREDSceneContext : public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
// 场景全局色调(RGB=颜色乘数, A=饱和度)
|
||||
UPROPERTY(EditAnywhere)
|
||||
FLinearColor BGMultColor = FLinearColor(1,1,1,1);
|
||||
|
||||
// 灾害效果参数(必杀技演出用)
|
||||
UPROPERTY(EditAnywhere)
|
||||
FVector DisasterPosition; // 灾害中心位置
|
||||
FVector DisasterWind; // 风力方向和强度
|
||||
float DisasterQuake; // 震动强度
|
||||
|
||||
// 时间参数
|
||||
float GameTime; // 游戏时间(可暂停)
|
||||
float BGTime; // 背景时间(独立于游戏时间)
|
||||
};
|
||||
|
||||
// SceneRendering.cpp — 数据传递到 ViewUniform
|
||||
ViewUniformShaderParameters.BGMultColor = SceneContext->BGMultColor;
|
||||
ViewUniformShaderParameters.DisasterPosition = SceneContext->DisasterPosition;
|
||||
// ... Shader 中通过 View.BGMultColor 等访问
|
||||
```
|
||||
|
||||
## 关联文档
|
||||
|
||||
- [[BGMultColor全局色调]] — 使用 `BGMultColor` 参数
|
||||
- [[RED场景视图类型]] — 场景分层与 Context 配合
|
||||
|
||||
## 修改文件列表
|
||||
## 代码修改情况
|
||||
|
||||
| 文件 | 修改类型 |
|
||||
|------|---------|
|
||||
| `Source/Runtime/Engine/Public/REDSceneContext.h` | **新增** |
|
||||
| `Source/Runtime/Renderer/Private/SceneRendering.cpp` | 读取 Context 写入 ViewUniform |
|
||||
| 文件路径 | 修改类型 | 修改内容 |
|
||||
|---------|---------|---------|
|
||||
| `Source/Runtime/Engine/Public/REDSceneContext.h` | **新增文件** | `UREDSceneContext` 类(BGMultColor/Disaster/Time) |
|
||||
| `Source/Runtime/Renderer/Private/SceneRendering.cpp` | 修改 | 读取 Context 写入 `ViewUniformShaderParameters` |
|
||||
|
||||
@@ -53,10 +53,34 @@ enum class EREDSceneViewType
|
||||
- 特效层独立的 Bloom 和后处理参数
|
||||
- 对战 UI(血条等)使用 HUD 层,不受场景后处理影响
|
||||
|
||||
## 修改文件列表
|
||||
## 完整代码解析
|
||||
|
||||
| 文件 | 修改类型 |
|
||||
|------|---------|
|
||||
| `Source/Runtime/Engine/Public/EngineTypes.h` | `EREDSceneViewType` 枚举 |
|
||||
| `Source/Runtime/Engine/Classes/GameFramework/PlayerController.h` | `GetREDSceneViewTypeFlag()` |
|
||||
| `Source/Runtime/Renderer/Private/SceneVisibility.cpp` | 可见性过滤 |
|
||||
```cpp
|
||||
// EngineTypes.h — 场景视图类型枚举
|
||||
// ASW 新增:将场景 Actor 按类型分层
|
||||
enum class EREDSceneViewType : uint8
|
||||
{
|
||||
REDSceneView_Character, // 角色层(玩家、AI)
|
||||
REDSceneView_Effect, // 特效层(粒子、光柱等)
|
||||
REDSceneView_BG, // 背景主层
|
||||
REDSceneView_BG_Layer1, // 背景分层1(近景装饰)
|
||||
REDSceneView_BG_Layer2, // 背景分层2
|
||||
// ... Layer3 ~ Layer8 // 更多背景分层
|
||||
REDSceneView_HUD // HUD 层
|
||||
};
|
||||
|
||||
// PlayerController 端
|
||||
// 获取当前需要渲染的层级位掩码
|
||||
uint32 GetREDSceneViewTypeFlag() const;
|
||||
// 例如:只渲染角色和特效
|
||||
// return (1 << REDSceneView_Character) | (1 << REDSceneView_Effect);
|
||||
```
|
||||
|
||||
## 代码修改情况
|
||||
|
||||
| 文件路径 | 修改类型 | 修改内容 |
|
||||
|---------|---------|---------|
|
||||
| `Source/Runtime/Engine/Public/EngineTypes.h` | 新增 | `EREDSceneViewType` 枚举(Character/Effect/BG/HUD 等) |
|
||||
| `Source/Runtime/Engine/Classes/GameFramework/PlayerController.h` | 新增 | `GetREDSceneViewTypeFlag()` 层级位掩码 |
|
||||
| `Source/Runtime/Renderer/Private/SceneVisibility.cpp` | 修改 | 按 REDSceneViewType 过滤可见性 |
|
||||
| `Source/Runtime/Renderer/Private/SceneRendering.cpp` | 修改 | 自定义排序键处理 |
|
||||
|
||||
@@ -55,10 +55,41 @@ class FUEISlateApplication : public FSlateApplication
|
||||
- 回放系统:按帧记录和回放输入
|
||||
- 控制器热插拔处理
|
||||
|
||||
## 修改文件列表
|
||||
## 完整代码解析
|
||||
|
||||
| 文件 | 修改类型 |
|
||||
|------|---------|
|
||||
| `Source/Runtime/Engine/Public/UEIEventHandler.h` | **新增** |
|
||||
| `Source/Runtime/Slate/Public/Framework/Application/UEISlateApplication.h` | **新增** |
|
||||
| `Source/Runtime/Slate/Private/Framework/Application/UEISlateApplication.cpp` | **新增** |
|
||||
```cpp
|
||||
// UEIEventHandler.h — 引擎回调接口
|
||||
class FUEIEventHandler
|
||||
{
|
||||
public:
|
||||
// 帧生命周期回调
|
||||
virtual void BeginFrame(); // 帧开始(输入采样时机)
|
||||
virtual void EndFrame(); // 帧结束
|
||||
virtual void Update(); // 逻辑更新
|
||||
|
||||
// 格斗游戏需要在精确的时间点采样输入
|
||||
// 确保回放系统的帧同步正确性
|
||||
};
|
||||
|
||||
// UEISlateApplication.h — Slate 输入管理扩展
|
||||
class FUEISlateApplication : public FSlateApplication
|
||||
{
|
||||
// User/Controller ID 映射表
|
||||
// Key: 物理控制器 Index
|
||||
// Value: 游戏内玩家 ID
|
||||
TMap<int32, int32> UserIndexMap;
|
||||
|
||||
// 格斗游戏场景:
|
||||
// 手柄1 (Index=0) → Player 1 (ID=0)
|
||||
// 手柄3 (Index=2) → Player 2 (ID=1)
|
||||
// 允许任意手柄对应任意玩家槽位
|
||||
};
|
||||
```
|
||||
|
||||
## 代码修改情况
|
||||
|
||||
| 文件路径 | 修改类型 | 修改内容 |
|
||||
|---------|---------|---------|
|
||||
| `Source/Runtime/Engine/Public/UEIEventHandler.h` | **新增文件** | `FUEIEventHandler` 帧生命周期回调接口 |
|
||||
| `Source/Runtime/Slate/Public/Framework/Application/UEISlateApplication.h` | **新增文件** | `FUEISlateApplication` 控制器映射 |
|
||||
| `Source/Runtime/Slate/Private/Framework/Application/UEISlateApplication.cpp` | **新增文件** | 实现 |
|
||||
|
||||
@@ -33,8 +33,29 @@ bool bAutoReleaseWhenFinished;
|
||||
|
||||
相机动画播放完毕后自动释放实例,避免格斗游戏频繁的相机震动(受击、必杀技等)导致的实例泄漏。
|
||||
|
||||
## 修改文件列表
|
||||
## 完整代码解析
|
||||
|
||||
| 文件 | 修改类型 |
|
||||
|------|---------|
|
||||
| `Source/Runtime/Engine/Classes/Camera/CameraAnimInst.h` | 新增标记 |
|
||||
```cpp
|
||||
// CameraAnimInst.h — 相机动画实例扩展
|
||||
class UCameraAnimInst
|
||||
{
|
||||
// ASW 新增:播放完毕后自动释放实例
|
||||
// 格斗游戏频繁触发相机震动(受击、必杀技),
|
||||
// 没有自动释放会导致实例泄漏
|
||||
UPROPERTY()
|
||||
bool bAutoReleaseWhenFinished;
|
||||
|
||||
// ASW 新增:水平翻转相机动画
|
||||
// 格斗游戏中玩家交换左右位置(交叉)时,
|
||||
// 相机震动需要水平翻转以保持视觉一致
|
||||
UPROPERTY()
|
||||
bool bPlayCameraAnimFlipH;
|
||||
};
|
||||
```
|
||||
|
||||
## 代码修改情况
|
||||
|
||||
| 文件路径 | 修改类型 | 修改内容 |
|
||||
|---------|---------|---------|
|
||||
| `Source/Runtime/Engine/Classes/Camera/CameraAnimInst.h` | 新增 | `bAutoReleaseWhenFinished` 自动释放标记 |
|
||||
| `Source/Runtime/Engine/Classes/Camera/CameraAnimInst.h` | 新增 | `bPlayCameraAnimFlipH` 水平翻转标记 |
|
||||
|
||||
Reference in New Issue
Block a user