一、投影模式 (Projection)
1. 透视模式 (Perspective)
原理:模拟人眼,近大远小(锥形体视锥)
核心参数:
Field of View (FOV)
:垂直视场角典型值:第一人称 60°-90°,驾驶舱 30°-45°
特效:FOV↑=视野变广(鱼眼效果),FOV↓=视野变窄(望远镜)
Clipping Planes
:Near
:近裁面(0.01-0.3,避免穿模)Far
:远裁面(100-1000,过大影响性能)
2. 正交模式 (Orthographic)
原理:无视距离,物体恒定大小(立方体视锥)
核心参数:
Size
:视口高度的一半(单位:世界坐标)计算:若想显示10单位高度区域 → Size=5
Clipping Planes
:同透视模式(控制Z轴范围)
二、清除与背景 (Clear Flags & Background)
1. Clear Flags(帧缓存清除策略)
模式 | 清除颜色 | 清除深度 | 典型用途 |
---|---|---|---|
Skybox | √ | √ | 开放世界(需设置天空盒) |
Solid Color | √ | √ | 纯色背景(太空/抽象场景) |
Depth Only | × | √ | UI摄像机必选 |
Don't Clear | × | × | 特殊效果(极少用) |
2. Background
仅当
Clear Flags = Solid Color
时生效建议用深灰色(RGB:30,30,30)替代纯黑避免色偏
三、渲染过滤 (Culling Mask)
本质:32位图层掩码(对应Layer面板的32个层)
操作逻辑:
// 代码示例:只渲染UI层和Enemy层 camera.cullingMask = (1 << LayerMask.NameToLayer("UI")) | (1 << LayerMask.NameToLayer("Enemy"));
经典用例:
主摄像机:排除UI层
小地图摄像机:仅显示Terrain层
阴影摄像机:仅渲染Cast Shadows的物体
四、深度与渲染顺序 (Depth)
核心规则:深度值大的摄像机后渲染(覆盖先渲染的画面)
多摄像机协作模板:
Camera_Main(场景渲染):
Depth = 0
Culling Mask = Everything & ~UI // 排除UI层
Clear Flags = Skybox
Camera_UI(界面渲染):
Depth = 1
Culling Mask = UI
Clear Flags = Depth Only // 保留场景颜色,只清深度
五、视口控制 (Viewport Rect)
归一化坐标:[0,0]左下角 → [1,1]右上角
参数详解:
X:视口左下角起始X坐标
Y:视口左下角起始Y坐标
W:视口宽度(0~1)
H:视口高度(0~1)
应用场景:
双人分屏:
Player1: (0,0,0.5,1)
+Player2: (0.5,0,0.5,1)
小地图:
(0.7,0.7,0.3,0.3)
六、目标纹理 (Target Texture)
工作流
创建Render Texture:
Assets > Create > Render Texture
绑定到Camera:拖入Camera组件的Target Texture槽
应用输出:
3D材质:赋给MeshRenderer的材质
UI显示:RawImage组件的Texture参数
高级技巧
// 动态创建渲染纹理
RenderTexture rt = new RenderTexture(512, 512, 16);
camera.targetTexture = rt;
// 完成后释放资源
rt.Release();
七、坐标转换(核心API)
1. 屏幕坐标 → 世界坐标
// 转换到3D世界(z为摄像机前方距离)
Vector3 worldPos = camera.ScreenToWorldPoint(
new Vector3(Input.mousePosition.x,
Input.mousePosition.y,
10) // z=10表示摄像机前方10单位
);
2. 世界坐标 → 屏幕坐标
// 用于UI跟随3D物体
Vector3 screenPos = camera.WorldToScreenPoint(enemy.transform.position);
uiElement.transform.position = screenPos;
3. 射线检测(物体拾取)
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit, 100))
{
Debug.Log("点击了:" + hit.collider.name);
}
八、高级功能
1. 物理摄像机 (URP/HDRP)
Focal Length
:焦距(毫米)→ 控制FOVSensor Size
:胶片尺寸 → 影响视野比例Aperture
:光圈 → 控制景深强度
2. 摄像机堆栈 (URP专属)
Base Camera(基础场景)
↓
Overlay Camera 1(特效层)
↓
Overlay Camera 2(UI层)
优势:比传统Depth排序更节省性能
3. 回调事件
void OnPreCull() { /* 裁剪前调用 */ }
void OnPreRender() { /* 渲染前调用 */ }
void OnPostRender() { /* 渲染后调用 */ }