狗屎Minimax坏我代码

This commit is contained in:
SoulliesOfficial
2026-04-18 13:57:19 -04:00
parent 41140a2017
commit 7379583165
473 changed files with 34480 additions and 8069 deletions

View File

@@ -0,0 +1,782 @@
# 动作游戏3C设计理论
## 什么是3C
3C是动作游戏开发中最核心的概念指的是
- **Character角色**: 游戏角色的外观、动画和动作
- **Camera摄像机**: 玩家观察和体验游戏世界的视角
- **Control操控**: 玩家输入与角色响应之间的交互
这三点直接影响玩家的**手感**、**沉浸感**和**游戏体验**。
---
## 一、Character角色设计原则
### 1.1 角色基础属性
#### 1.1.1 移动参数
```csharp
public class CharacterMovementConfig
{
// 速度参数
public float walkSpeed = 3.0f; // 行走速度
public float runSpeed = 7.0f; // 奔跑速度
public float sprintSpeed = 10.0f; // 冲刺速度
// 加减速
public float acceleration = 10.0f; // 加速率
public float deceleration = 15.0f; // 减速率
public float turnSpeed = 10.0f; // 转身速度
// 跳跃参数
public float jumpForce = 8.0f; // 跳跃力度
public float gravity = 20.0f; // 重力
public float airControl = 0.3f; // 空中控制力
}
```
#### 1.1.2 动作时间参数
```csharp
public class CharacterTimingConfig
{
// 闪避
public float dodgeDuration = 0.3f; // 闪避持续时间
public float dodgeInvincibleTime = 0.2f; // 无敌时间
public float dodgeDistance = 5.0f; // 闪避距离
// 格挡
public float blockDuration = 0.5f; // 格挡持续时间
public float perfectBlockWindow = 0.1f; // 完美格挡窗口
public float blockAngle = 90.0f; // 格挡角度
// 攻击
public float lightAttackDuration = 0.2f; // 轻攻击时间
public float heavyAttackDuration = 0.4f; // 重攻击时间
public float attackRecoveryTime = 0.3f; // 攻击后摇
}
```
### 1.2 动作动画原则
#### 1.2.1 动画分层
```
底层Base Layer: 基础移动(站立、行走、奔跑)
中层Mid Layer: 上半身动作(攻击、格挡、交互)
顶层Top Layer: 特殊动作(受击、特殊技能)
```
#### 1.2.2 动画混合原则
1. **优先级明确**: 攻击 > 防御 > 移动
2. **过渡平滑**: 使用混合树避免动作跳变
3. **层级隔离**: 不同层级动画互不干扰
4. **符合物理**: 动画应该符合人体运动规律
---
## 二、Camera摄像机设计原则
### 2.1 第三人称视角参数
#### 2.1.1 基础参数
```csharp
public class ThirdPersonCameraConfig
{
// 位置参数
public float distance = 8.0f; // 距离
public float height = 3.0f; // 高度
public float horizontalOffset = 0.5f; // 水平偏移
public float verticalOffset = 1.5f; // 垂直偏移
// 角度参数
public float minPitch = -30.0f; // 最小仰角
public float maxPitch = 60.0f; // 最大俯角
public float rotationSpeed = 3.0f; // 旋转速度
// FOV
public float normalFOV = 50.0f; // 正常视野
public float sprintFOV = 60.0f; // 冲刺视野
public float aimFOV = 35.0f; // 瞄准视野
}
```
#### 2.1.2 视角距离分段
```
极近距离Close Range: 3-5 单位
├── 适用场景: 潜行、近战
└── 优点: 强调紧张感
标准距离Normal Range: 6-8 单位
├── 适用场景: 普通战斗、探索
└── 优点: 平衡视野和代入感
远距离Far Range: 10-15 单位
├── 适用场景: 观察环境、远程战斗
└── 优点: 最大视野
战术距离Tactical Range: 15-25 单位
├── 适用场景: 战术规划、大战场
└── 优点: 战略视角
```
### 2.2 摄像机跟随系统
#### 2.2.1 位置跟随
```csharp
public class CameraFollowSettings
{
// 位置平滑
public bool usePositionSmoothing = true;
public float positionSmoothSpeed = 5.0f; // 位置平滑速度
public float positionDeadzone = 0.1f; // 位置死区
// 碰撞
public bool enableCollision = true;
public float collisionRadius = 0.3f; // 碰撞半径
public LayerMask collisionLayers; // 碰撞层
// 躲避
public bool enableDodge = true;
public float dodgeSpeed = 10.0f; // 躲避速度
public float returnSpeed = 3.0f; // 返回速度
}
```
#### 2.2.2 旋转跟随
```csharp
public class CameraRotationSettings
{
// 旋转平滑
public bool useRotationSmoothing = true;
public float rotationSmoothSpeed = 8.0f; // 旋转平滑速度
// 角度限制
public bool limitVerticalAngle = true;
public float minPitch = -30.0f; // 最小俯仰角
public float maxPitch = 60.0f; // 最大俯仰角
// 自动校准
public bool enableAutoRecenter = true;
public float recenterDelay = 1.5f; // 校准延迟
public float recenterSpeed = 5.0f; // 校准速度
}
```
### 2.3 摄像机震动系统
#### 2.3.1 震动类型
```
┌─────────────────────────────────────────────────────┐
│ 震动类型矩阵 │
├──────────────┬──────────────┬──────────────────────┤
│ 类型 │ 频率 │ 用途 │
├──────────────┼──────────────┼──────────────────────┤
│ 手持震动 │ 高频(10-30Hz)│ 武器后坐力、脚步 │
│ 冲击震动 │ 中频(5-15Hz) │ 爆炸、撞击 │
│ 慢速震动 │ 低频(1-5Hz) │ 大规模爆炸、地震 │
│ 震动偏移 │ 极低频(<1Hz) │ 角色移动视角晃动 │
└──────────────┴──────────────┴──────────────────────┘
```
#### 2.3.2 震动参数配置
```csharp
public class CameraShakeConfig
{
// 基础震动
public float shakeDuration = 0.2f; // 震动持续时间
public float shakeIntensity = 1.0f; // 震动强度
// 旋转震动
public Vector3 rotationShake = new Vector3(1f, 1f, 0.5f);
// 位移震动
public Vector3 positionShake = new Vector3(0.5f, 0.3f, 0.2f);
// 衰减曲线
public AnimationCurve shakeCurve;
}
// 震动预设
public class CameraShakePresets
{
public static CameraShakeConfig LightHit => new CameraShakeConfig
{
shakeDuration = 0.1f,
shakeIntensity = 0.3f,
rotationShake = new Vector3(2f, 1f, 0.5f)
};
public static CameraShakeConfig HeavyHit => new CameraShakeConfig
{
shakeDuration = 0.3f,
shakeIntensity = 1.0f,
rotationShake = new Vector3(5f, 3f, 2f)
};
public static CameraShakeConfig Explosion => new CameraShakeConfig
{
shakeDuration = 0.5f,
shakeIntensity = 2.0f,
rotationShake = new Vector3(8f, 5f, 3f)
};
}
```
### 2.4 特殊视角模式
#### 2.4.1 锁定目标视角
```
锁定目标相机 (Lock-On Camera)
├── 特点: 主角朝向敌人,相机跟随敌人
├── 优点: 便于观察敌人动作
├── 适用: 近战动作游戏、Boss战
└── 实现:
├── 相机看向目标
├── 主角自动转向目标
└── 保留闪避时的相机跟随
```
#### 2.4.2 自由视角
```
自由视角相机 (Free Look Camera)
├── 特点: 相机独立于主角方向
├── 优点: 灵活观察周围环境
├── 适用: 探索、潜行、观察
└── 实现:
├── 相机与主角方向分离
├── 支持360度旋转
└── 主角朝向跟随移动方向
```
#### 2.4.3 电影视角
```
电影相机 (Cinematic Camera)
├── 特点: 预设相机路径,自动播放
├── 优点: 增强演出效果
├── 适用: 过场动画、Boss登场、技能特写
└── 实现:
├── 路径关键帧
├── 焦点跟随
└── 景深变化
```
### 2.5 摄像机FOV系统
#### 2.5.1 FOV动态调整
```csharp
public class FOVSettings
{
// 基础FOV
public float baseFOV = 50.0f;
// 速度感FOV
public float sprintFOV = 60.0f;
public float sprintFOVSpeed = 8.0f;
// 瞄准FOV
public float aimFOV = 35.0f;
public float aimFOVSpeed = 10.0f;
// 特殊技能FOV
public float ultimateFOV = 70.0f;
public float ultimateFOVSpeed = 5.0f;
}
```
#### 2.5.2 FOV调整时机
```
时机 FOV变化 速度
───────────────────────────────────────────
正常移动 50° -
奔跑加速 50° → 60° 快速(0.3s)
全力冲刺 60° → 70° 中速(0.5s)
瞄准 50° → 35° 快速(0.2s)
释放大招 50° → 70° 慢速(0.8s)
受到重伤 轻微震动 即时
```
### 2.6 遮挡处理系统
#### 2.6.1 遮挡类型
```
1. 透明化处理 (Fade)
└── 遮挡物渐变透明,保持视野
2. 相机躲避 (Dodge)
└── 相机自动移动到安全位置
3. 快速推近 (Push In)
└── 相机快速推向角色,减少遮挡
4. 目标穿透 (Through)
└── 相机看向目标时穿透遮挡物
```
#### 2.6.2 透明化参数
```csharp
public class OcclusionFadeConfig
{
// 触发条件
public float fadeStartDistance = 1.0f; // 开始距离
public float fadeEndDistance = 3.0f; // 结束距离
// 透明效果
public float fadeTargetAlpha = 0.3f; // 目标透明度
public float fadeSpeed = 8.0f; // 淡出速度
public float recoveryDelay = 0.2f; // 恢复延迟
public float recoverySpeed = 3.0f; // 恢复速度
// 检测射线
public int rayCount = 5; // 射线数量
public float rayRadius = 0.2f; // 球形检测半径
}
```
---
## 三、Control操控设计原则
### 3.1 输入设计
#### 3.1.1 输入映射
```csharp
public class InputMapping
{
// 移动
public InputAction moveAction; // WASD/摇杆移动
// 视角
public InputAction lookAction; // 鼠标/右摇杆视角
// 动作
public InputAction jumpAction; // 跳跃 (Space)
public InputAction sprintAction; // 冲刺 (Shift)
public InputAction dodgeAction; // 闪避 (Ctrl/V)
// 战斗
public InputAction attackAction; // 攻击 (LMB/Trigger)
public InputAction heavyAttackAction; // 重攻击 (RMB/R2)
public InputAction blockAction; // 格挡 (Hold RMB/R2)
// 武器
public InputAction weaponSwitchAction; // 武器切换 (Q/E)
public InputAction skillAction1; // 技能1 (1)
public InputAction skillAction2; // 技能2 (2)
// 系统
public InputAction pauseAction; // 暂停 (Esc)
public InputAction lockOnAction; // 锁定 (Tab)
}
```
#### 3.1.2 输入响应时间
```
输入 → 响应 时间表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
移动 0-16ms 即时响应
视角旋转 0-16ms 即时响应
跳跃 16-33ms 1帧延迟
闪避 33-50ms 2-3帧延迟
攻击 33-66ms 2-4帧延迟
格挡 33-50ms 2-3帧延迟
技能 50-100ms 3-6帧延迟
```
### 3.2 输入缓冲系统
#### 3.2.1 缓冲机制
```csharp
public class InputBufferConfig
{
// 缓冲时间
public float attackBufferTime = 0.15f; // 攻击缓冲时间
public float dodgeBufferTime = 0.2f; // 闪避缓冲时间
public float jumpBufferTime = 0.1f; // 跳跃缓冲时间
// 优先级
public bool enablePriority = true;
public InputPriority priorityOrder = InputPriority.Dodge > InputPriority.Jump > InputPriority.Attack;
}
public enum InputPriority
{
Dodge, // 最高优先级
Jump,
Attack,
Block,
Move // 最低优先级
}
```
#### 3.2.2 缓冲执行逻辑
```
玩家输入 → 存入缓冲区 → 按优先级执行
当前动作可被打断?
↓ 是
检测缓冲输入 → 匹配成功 → 执行缓冲动作
↓ 否
继续当前动作 → 动作结束 → 清空缓冲区
```
### 3.3 预输入系统
#### 3.3.1 预输入原理
```csharp
public class PreinputConfig
{
// 预输入窗口
public float preinputWindow = 0.1f; // 动作结束前多久可以输入
// 预输入验证
public bool requireDirectionMatch = true; // 是否要求方向匹配
public float directionThreshold = 0.8f; // 方向相似度阈值
}
```
#### 3.3.2 预输入示例
```
场景: 玩家刚结束一个攻击动作
时机1: 攻击结束前 0.1s 按下闪避
结果: 立即执行闪避,无缝衔接
时机2: 攻击结束前 0.2s 按下闪避
结果: 忽略(超出预输入窗口)
时机3: 攻击结束后 0.1s 按下闪避
结果: 正常执行闪避(普通输入)
```
### 3.4 输入辅助系统
#### 3.4.1 方向修正
```csharp
public class InputAssistConfig
{
// 自动锁定
public bool enableAutoLock = false;
public float autoLockAngle = 30.0f; // 自动锁定角度
public float autoLockRange = 5.0f; // 自动锁定距离
// 方向吸附
public bool enableDirectionSnapping = true;
public float snapAngle = 45.0f; // 吸附角度
public float snapDeadzone = 0.5f; // 吸附死区
// 目标吸附
public bool enableTargetSnapping = true;
public float targetSnapAngle = 60.0f; // 目标吸附角度
}
```
#### 3.4.2 友好度设置
```
辅助等级 自动锁定 方向吸附 目标吸附 瞄准辅助
────────────────────────────────────────────────────────
新手 ✓ ✓ ✓ ✓
普通 ✓ ✓ ✗ ✓
老手 ✗ ✗ ✗ ✗
硬核 ✗ ✗ ✗ ✗
```
---
## 四、3C协调设计
### 4.1 移动与相机协调
#### 4.1.1 移动时相机行为
```
移动类型 相机行为
─────────────────────────────────────────
静止站立 缓慢恢复居中
缓慢行走 平滑跟随
正常奔跑 快速跟随 + FOV增加
冲刺 快速跟随 + 大FOV + 震动
闪避/后撤 特殊跟随路径
跳跃 垂直跟随 + 轻微下压
```
#### 4.1.2 相机过渡时机
```csharp
public class CameraTransitionSettings
{
// 移动类型切换
public float walkToRunThreshold = 5.0f; // 行走→奔跑阈值
public float runToSprintThreshold = 8.0f; // 奔跑→冲刺阈值
// FOV过渡
public float fovTransitionSpeed = 5.0f; // FOV变化速度
// 距离过渡
public float distanceTransitionSpeed = 3.0f; // 距离变化速度
// 角色旋转过渡
public float characterRotationDelay = 0.1f; // 角色旋转延迟
}
```
### 4.2 战斗与相机协调
#### 4.2.1 攻击时相机行为
```
攻击类型 相机行为
───────────────────────────────────────
轻攻击 轻微震动 + 快速恢复
重攻击 中度震动 + 视角跟随武器
技能释放 大震动 + 可能有特写
完美格挡/闪避 轻微震动 + 焦点锁定
受击 强烈震动 + 屏幕变红
```
#### 4.2.2 锁定系统行为
```csharp
public class LockOnSettings
{
// 锁定范围
public float maxLockOnDistance = 50.0f; // 最大锁定距离
public float lockOnAngle = 180.0f; // 锁定角度
// 切换
public bool enableTargetSwitch = true;
public float switchCooldown = 0.3f; // 切换冷却
public InputAction switchTargetAction; // 切换目标输入
// 脱离
public float autoUnlockDistance = 60.0f; // 自动解锁距离
public float unlockIfBehindTime = 2.0f; // 目标在背后多久解锁
}
```
### 4.3 特殊状态协调
#### 4.3.1 剧情/过场状态
```csharp
public class CinematicSettings
{
// 进入/退出
public float fadeInDuration = 0.5f; // 淡入时长
public float fadeOutDuration = 0.5f; // 淡出时长
// 相机控制
public bool disablePlayerCamera = true; // 禁用玩家控制相机
public bool lockPlayerMovement = true; // 锁定玩家移动
// UI
public bool hideHUD = true; // 隐藏HUD
public bool showDialogue = false; // 显示对话
}
```
#### 4.3.2 死亡/复活状态
```csharp
public class DeathCameraSettings
{
// 死亡相机
public float deathCameraHeight = 2.0f; // 相机高度
public float deathCameraDistance = 5.0f; // 相机距离
public float deathCameraDuration = 2.0f; // 死亡相机持续时间
// 复活相机
public float respawnCameraSpeed = 3.0f; // 复活相机速度
public TransitionCurve respawnCurve; // 复活过渡曲线
}
```
---
## 五、调试工具
### 5.1 运行时调试显示
```csharp
public class CameraDebugInfo : MonoBehaviour
{
public bool showDebugInfo = true;
void OnGUI()
{
if (!showDebugInfo) return;
GUILayout.BeginArea(new Rect(10, 10, 400, 300));
GUILayout.Label($"Camera Distance: {currentDistance}");
GUILayout.Label($"Camera Pitch: {currentPitch}");
GUILayout.Label($"Camera Yaw: {currentYaw}");
GUILayout.Label($"Current FOV: {currentFOV}");
GUILayout.Label($"Camera State: {cameraState}");
GUILayout.Label($"Is Locking: {isLocking}");
GUILayout.EndArea();
}
}
```
### 5.2 编辑器调试工具
```csharp
#if UNITY_EDITOR
[CustomEditor(typeof(ThirdPersonCameraController))]
public class CameraControllerEditor : Editor
{
void OnSceneGUI()
{
var controller = target as ThirdPersonCameraController;
// 绘制相机锥体
Handles.color = Color.cyan;
Vector3 camPos = controller.transform.position;
Vector3 forward = controller.transform.forward * controller.distance;
Handles.DrawLine(camPos, camPos + forward);
Handles.DrawWireDisc(camPos + forward, Vector3.up, controller.fovAtDistance);
}
}
#endif
```
### 5.3 录制回放工具
```csharp
public class CameraRecorder : MonoBehaviour
{
public List<CameraFrame> recordedFrames = new List<CameraFrame>();
private bool isRecording;
[Serializable]
public struct CameraFrame
{
public float time;
public Vector3 position;
public Quaternion rotation;
public float fov;
}
public void StartRecording()
{
recordedFrames.Clear();
isRecording = true;
}
public void StopRecording()
{
isRecording = false;
}
void LateUpdate()
{
if (isRecording)
{
recordedFrames.Add(new CameraFrame
{
time = Time.time,
position = transform.position,
rotation = transform.rotation,
fov = GetComponent<Camera>().fieldOfView
});
}
}
}
```
---
## 六、优化建议
### 6.1 性能优化
#### 6.1.1 摄像机性能
```
优化项 建议
───────────────────────────────────
相机更新频率 跟随角色更新LateUpdate
震动系统 使用对象池避免GC
碰撞检测 使用LayerMask减少检测
FOV计算 缓存计算结果
距离计算 使用sqrMagnitude代替magnitude
```
#### 6.1.2 输入性能
```
优化项 建议
───────────────────────────────────
输入检测 使用事件而非轮询
输入缓冲 使用固定大小数组
预输入验证 简化验证逻辑
辅助计算 必要时才计算
```
### 6.2 内存优化
```
优化项 建议
───────────────────────────────────
震动预设 使用Struct而非Class
动画曲线 共享常用曲线
相机状态 使用Enum而非字符串
调试信息 运行时可关闭
```
---
## 七、参考案例
### 7.1 优秀3C设计游戏
1. **Dark Souls系列** - 精准的锁定系统
2. **Devil May Cry系列** - 华丽的视角演出
3. **God of War** - 优秀的过肩视角
4. **The Witcher 3** - 自然的相机跟随
5. **Ghost of Tsushima** - 电影化的相机语言
### 7.2 关键学习点
```
游戏 学习点
─────────────────────────────────────────
Dark Souls 锁定系统、精准反馈
Devil May Cry 视角演出、特写镜头
God of War 过肩视角、战斗相机
Witcher 3 探索相机、自然跟随
Ghost of Tsushima 电影语言、视觉叙事
Bayonetta 闪避特写、Witch Time
```
---
## 八、总结
### 8.1 3C设计核心原则
1. **一致性**: 所有系统应该协调一致
2. **响应性**: 玩家输入应该得到即时反馈
3. **可读性**: 玩家应该能清楚看到游戏状态
4. **沉浸感**: 相机应该增强而非干扰体验
5. **辅助性**: 应该提供合理的辅助选项
### 8.2 开发检查清单
```
□ 基础移动流畅
□ 视角旋转平滑
□ 战斗反馈明确
□ 锁定系统稳定
□ 遮挡处理自然
□ FOV变化合理
□ 震动效果适度
□ 调试工具完善
□ 性能表现良好
□ 辅助选项完整
```
### 8.3 常见问题
```
问题 解决方案
─────────────────────────────────────────
相机抖动 增加平滑度,降低跟随速度
视角穿墙 增加碰撞检测,调整躲避速度
锁定不稳定 增加目标切换冷却,调整角度阈值
输入延迟 检查事件调用顺序,优化计算
FOV变化突兀 使用缓动曲线,增加过渡时间
```
---
*文档生成日期: 2026-04-17*
*生成者: Game Designer Agent*