How to Develop a Game
Camera
PublishDate: 2025-05-28 | CreateDate: 2025-05-28 | LastModify: 2025-05-28 | Creator:ljf12825

在Unity中,Camera是游戏中视角呈现的核心组件,它决定了玩家从哪里、以什么方式看到游戏世界。

可以将它理解为游戏世界的“观察者”,通过相机的视角来渲染和展示游戏世界的内容

Camera的核心概念

  1. 视野(Field of View, FOV)
  1. 摄像机类型
  1. 裁剪平面(Clipping Planes)
  1. 深度(Depth)
  1. 渲染目标(Render Target)
  1. 视锥体(View Frustum)
RenderTexture rt = new RenderTexture(1920, 1080, 16);
camera.targetTexture = rt;

用途:

Camera常用属性

Clear Flag(清除模式)

ClearFlag 模式描述
Skybox使用当前 Skybox 作为背景
Solid Color使用指定背景颜色
Depth Only仅清除深度缓冲区(常用于叠加 UI)
Nothing什么都不清除(很少用)

Viewport Rect视口渲染(rect)

camera.rec = new Rect(x, y, w, h);

示例:左下角显示一个小窗口(小地图)

miniMapCamera.rect = new Rect(0.75f, 0.75f, 0.25f, 0.25f);

相机控制和效果

  1. 相机跟随

示例:

void Update()
{
    Vector3 targetPosition = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z);
    transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, 0.3f);
}
  1. 第一人称与第三人称视角:
  1. 后处理效果(Post-Processing)
  1. 摄像机遮挡与碰撞

常见技巧

  1. 相机拉远/拉近(Zoom)
  1. 自定义相机动画

常见使用案例

1.世界坐标转UI坐标(UI跟随物体)

Vector3 screenPos = Camera.main.WorldToScreenPoint(worldTarget.Position);
uiObject.position = screenPos;

2.鼠标点击获取世界坐标(射线)

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit)) Debug.Log("点击位置是:" + hit.point);

3.多相机渲染UI与3D

优化建议

摄像机插件推荐

Cinemachine(Unity官方)

API

Properties

属性类型说明
clearFlagsCameraClearFlags清除模式(背景如何处理)
backgroundColorColor背景颜色(Clear Flags 为 Color 时有效)
cullingMaskLayerMask渲染哪些层的物体(通过 Layer 过滤)
orthographicbool是否为正交摄像机(2D 用)
orthographicSizefloat正交相机的可视区域高度一半
fieldOfViewfloat视野角度(仅透视模式下有效)
nearClipPlanefloat最近可见距离
farClipPlanefloat最远可见距离
depthfloat相机渲染优先级(数字大者后绘制)
targetTextureRenderTexture渲染输出目标(用于后处理、UI)
aspectfloat宽高比,默认由屏幕决定
rectRect相机视口(屏幕中的显示区域)
pixelRectRect实际像素区域
cameraTypeCameraType摄像机类型(Game、Scene、Preview)
enabledbool是否启用此相机

Methods

方法说明
ScreenToWorldPoint(Vector3)将屏幕坐标转为世界坐标(Z 轴代表深度)
WorldToScreenPoint(Vector3)将世界坐标转为屏幕坐标
ScreenToViewportPoint(Vector3)屏幕坐标转视口坐标(0~1)
ViewportToWorldPoint(Vector3)视口转世界坐标
Render()手动触发相机渲染(常用于离屏渲染)
ResetAspect()重置相机宽高比为屏幕比例
ResetProjectionMatrix()重置投影矩阵

Unity官方文档(Camera)