> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wanyouxi.online/llms.txt
> Use this file to discover all available pages before exploring further.

# 摄像机设计深度指南

> **摘要**：本文档深入拆解 Unity Camera 的核心参数及 Cinemachine 的调优细节。

目标是帮助你理解每一个滑块背后的**光学原理**与**心理学影响**，而不仅仅是“复制最佳设置”。

## 1. FOV (视场角) 终极解析

FOV (Field of View) 是摄像机参数中最重要、也最容易被误解的一个。

### 1.1 FOV 到底是什么？

想象你的眼睛（或镜头）是一个圆锥体的顶点。FOV 就是这个圆锥体张开的角度。

* **Unity 的 FOV:** 默认指的是 **Vertical FOV (垂直视场角)**。
  * *注意:* 很多 FPS 游戏（如 CS:GO, Overwatch）说的是 Horizontal FOV (水平视场角)。
  * *换算:* 在 16:9 屏幕下，60° 的垂直 FOV 大约等于 90° 的水平 FOV。

### 1.2 长焦 vs 广角：视觉心理学

FOV 的值决定了画面的**透视畸变 (Perspective Distortion)** 程度。

| FOV (Vertical) | 镜头类型               | 视觉感受            | 适用场景                | 心理暗示       |
| :------------- | :----------------- | :-------------- | :------------------ | :--------- |
| **10° - 30°**  | **长焦 (Telephoto)** | 扁平、无畸变、距离感被压缩   | 狙击开镜、卡牌展示、UI特写      | 冷静、客观、观察者  |
| **40° - 55°**  | **标准 (Standard)**  | 接近人眼单眼舒适区，自然    | **ARPG、MOBA、塔防俯视角** | 舒适、中立、掌控全局 |
| **60° - 80°**  | **广角 (Wide)**      | 边缘拉伸、速度感强、距离感夸张 | FPS、赛车、动作游戏近战       | 紧张、快速、身临其境 |
| **90°+**       | **超广角 (Fish-eye)** | 严重畸变，鱼眼效果       | 恐怖游戏、极速穿梭           | 疯狂、失控、非人视角 |

### 1.3 为什么上帝视角推荐 40°-50°？

* **如果用 20° (过小):** 地面像一张纸贴在屏幕上，角色像纸片人，没有立体的“站立感”。
* **如果用 80° (过大):** 屏幕边缘的塔和怪物会歪斜得很厉害（透视拉伸），玩家难以判断具体的攻击距离。
* **结论:** **45° 是黄金平衡点**。既保留了透视带来的立体感，又保证了战场的几何准确性。

***

## 2. 投影模式：透视 vs 正交

### 2.1 正交 (Orthographic)

* **原理:** 所有的光线平行。物体无论远近，在屏幕上一样大。
* **优点:** 像素完美 (Pixel Perfect)，永远不会有透视变形。
* **缺点:** **没有纵深感 (Depth)**。你看不到墙壁的侧面，很难表现高低差。
* **适用:** 纯 2D 游戏、纪念碑谷风格的解谜。

### 2.2 透视 (Perspective) - *本作推荐*

* **原理:** 近大远小。
* **优势:**
  * **视差 (Parallax):** 当镜头移动时，近处的柱子移动快，远处的地板移动慢。这种相对运动瞬间建立了“世界是 3D 的”感觉。
  * **高度感:** 能够一眼看出 Boss 比玩家高大威猛。

***

## 3. 裁剪平面 (Clipping Planes)

很多新手会随意设置 Near=0.01, Far=5000。**这是错误的！**

### 3.1 深度缓冲精度 (Z-Buffer Precision)

GPU 用有限的位数 (通常 24-bit) 来记录物体的深度。这个精度分布是**非线性**的，绝大部分精度集中在 Near Plane 附近。

* **如果 Near 设得太小 (e.g., 0.01):** 99% 的深度精度被浪费在眼前 1米 的范围内。远处的物体会因为精度不足而闪烁 (Z-fighting)，比如地砖和地毯重叠处疯狂闪动。
* **如果 Far 设得太大 (e.g., 10000):** 同样会稀释精度，且增加 Culling (剔除) 计算压力。

### 3.2 推荐设置

* **Near:** **0.3** (不要小于 0.1，除非你是做显微镜模拟器)。
* **Far:** **100 - 200** (俯视角游戏能看多远？没必要渲染几公里外的山)。

***

## 4. Cinemachine 基础调优：跟随与瞄准

Cinemachine 是 Unity 官方的神级插件，用它来代替手写 `Camera.main.transform.position = player.position + offset`。

### 4.1 Body: Transposer (位移跟随)

决定摄像机如何跟随目标移动。

* **Follow Offset:** 摄像机相对于主角的固定位置 (e.g., `(0, 10, -10)`).
* **Damping (阻尼) - *手感的核心***
  * 这就好比摄像机和主角之间连了一根皮筋。
  * **X/Z Damping (0.5):** 主角跑动时，摄像机带有惯性地平滑追过去。数值越大，滞后感越强，越“肉”。
  * **Y Damping (2.0):** **关键点！** 主角跳跃时，如果你不希望摄像机跟着剧烈上下颠簸，就把 Y 轴阻尼设大。这样主角跳，镜头基本不动，只有主角爬高台时镜头才慢慢跟上去。

### 4.2 Aim: Composer (旋转瞄准)

决定摄像机看向哪里。俯视角通常不需要 LookAt，但在特写时需要。

* **Lookahead Time (预判时间):** **高级参数。**
  * *原理:* 根据目标当前的速度向量，让相机“看向未来”。
  * *设置:* 设为 **0.1 - 0.3**。
  * *效果:* 当玩家向右跑时，相机会自动稍稍向右偏转，让屏幕右侧（前方）留出更多视野。这符合人类“走路看路”的本能。
* **Lookahead Smoothing:** 必须配合 Time 使用，防止预判过于抖动。设为 **10** 左右。
* **Dead Zone (死区):** 屏幕中心的一个矩形区域。如果目标在这个区域内移动，**摄像机纹丝不动**。
  * *作用:* 防止主角轻微晃动导致画面不停微调，造成晕眩。
* **Soft Zone (软区):** 死区之外的区域。目标进入这里，摄像机开始缓慢旋转追赶。

***

## 5. Cinemachine 进阶组件：解决常见痛点

### 5.1 限制边界 (Extensions -> CinemachineConfiner)

**痛点:** 相机跟着主角走到地图边缘，结果拍到了地图外面的虚空（Skybox），甚至拍到了未渲染的背面。

* **用法:**
  1. 在场景里建一个空的 GameObject，挂一个 `Collider` (Box 或 Polygon)。

  2. 勾选 `Is Trigger`。

  3. 调整 Collider 大小，包围住**摄像机允许活动的范围**（注意是摄像机的范围，不是主角的范围）。

  4. 在虚拟相机上添加 Extension: `CinemachineConfiner`。

  5. 把 Collider 拖进去。

* **Damping:** 设为 **0.5**。当相机撞墙时，会像弹簧一样柔和地停住，而不是硬邦邦地卡住。

### 5.2 多目标聚焦 (Target Group)

**痛点:** 刷怪了，或者双人联机，相机怎么同时拍到两个人？

* **用法:**
  1. 创建一个空物体，挂载 `CinemachineTargetGroup` 脚本。

  2. 把 Player 1, Player 2 (或者 Player 和 Boss) 拖进 Targets 列表。

  3. **Radius (半径):** 设置每个目标的“势力范围”。

  4. **Weight (权重):** 如果想让相机更偏向主角，把主角权重设为 2，Boss 设为 1。

  5. 将虚拟相机的 Follow/LookAt 目标设置为这个 TargetGroup 物体。

  6. **关键:** 只有配合 `Body: Framing Transposer` 的 **Group Framing Mode** 才能实现自动拉远拉近。如果是普通的 Transposer，它只会盯着中心点不动。

***

## 6. 镜头切换与导演意识 (Blending)

如何在“战斗视角”和“处决特写”之间平滑切换？

### 6.1 虚拟相机优先级 (Priority)

* 场景里可以放 10 个虚拟相机。
* **规则:** Cinemachine Brain 永远只渲染 **Priority 最高** 且 **Active** 的那个相机。
* **实战:**
  * `Cam_Main` (Priority: 10) - 常驻。
  * `Cam_Finisher` (Priority: 20) - 禁用状态。
  * 当触发处决时，代码启用 `Cam_Finisher`。Brain 会自动检测到它优先级更高，开始切换。

### 6.2 混合设置 (Cinemachine Brain)

挂在 MainCamera 上的脚本。

* **Default Blend:** `Ease In Out` (2秒)。
* **Custom Blends:** 可以为特定相机对定义不同的切换方式。
  * *Main -> Finisher:* `Ease In` (0.2秒) —— 快速切入特写，强调冲击力。
  * *Finisher -> Main:* `Ease Out` (1.5秒) —— 处决完后，缓慢拉回上帝视角，让玩家看清战场局势。

***

## 7. 镜头特效实战 (Screen Shake & Impulse)

不仅要视觉，还要**体感**。

### 7.1 噪点晃动 (Noise)

* 给 Cinemachine Virtual Camera 添加 `Basic Multi Channel Perlin`。
* **Profile:** `6D Shake` (剧烈) 或 `Handheld Normal` (模拟手持呼吸感)。
* *用法:* 平时设为 0。当进入“狂暴模式”或“低血量”时，通过代码动态增加 `Amplitude Gain`，创造不安感。

### 7.2 脉冲震动 (Impulse)

* **原理:** 独立的震动事件，不影响主摄像机轨迹。
* **打击感公式:**
  * **方向:** 震动方向应与攻击方向一致 (e.g., 向右挥剑，屏幕向右猛挫一下)。
  * **衰减:** 使用 `Exponential Decay` (指数衰减)，震动瞬间最强，然后迅速归零。不要用正弦波来回晃。

***

## 8. 总结：合格的俯视角相机参数表

| 参数                  | 推荐值             | 理由                  |
| :------------------ | :-------------- | :------------------ |
| **Projection**      | **Perspective** | 立体感、视差              |
| **FOV (Vertical)**  | **45°**         | 几何畸变与透视感的完美平衡       |
| **Position Offset** | **(0, 12, -9)** | 约 55° 俯视，兼顾战场与角色细节  |
| **Near Clip**       | **0.3**         | 保证 Z-Buffer 精度，防止闪烁 |
| **Far Clip**        | **150**         | 性能优化，足够覆盖视距         |
| **Body**            | **Transposer**  | 最适合固定角度俯视           |
| **Damping (X/Z)**   | **0.4**         | 灵敏跟随，轻微惯性           |
| **Damping (Y)**     | **1.5**         | 过滤掉跳跃/地形起伏带来的颠簸     |
| **Lookahead Time**  | **0.15**        | 动态预判玩家前进方向          |
| **Confiner**        | **Enabled**     | 必须加，防止看到地图边缘穿帮      |
