Unity(2022.3.41LTS) - 摄像机

目录

一、基本概念

二、重要属性

三、摄像机模式

四、脚本控制

五、渲染设置

六. 组件详细介绍



一、基本概念

  1. 作用:摄像机决定了玩家在游戏中能够看到的内容。它就像是玩家的眼睛,从特定的位置和角度观察场景,并将场景中的物体渲染到屏幕上。
  2. 类型:
    • 主摄像机(Main Camera):每个场景通常都有一个主摄像机,它是默认的观察视角。主摄像机的设置对游戏的整体视觉效果起着关键作用。
    • 附加摄像机:可以在场景中添加多个附加摄像机,用于实现特定的效果,如分屏显示、小地图等。

二、重要属性

  1. 位置和旋转:
    • 位置决定了摄像机在场景中的坐标。可以通过在编辑器中直接拖动摄像机或者在脚本中修改其 Transform 组件的 position 属性来调整位置。
    • 旋转决定了摄像机的观察方向。可以通过在编辑器中旋转摄像机或者在脚本中修改其 Transform 组件的 rotation 属性来调整旋转。
  2. 视野(Field of View):
    • 对于透视摄像机,视野决定了摄像机的观察范围。较大的视野会显示更多的场景,但可能会导致物体变形。较小的视野则会聚焦在较小的区域,适用于需要特写或瞄准的场景。
    • 可以在 Inspector 面板中直接调整视野的值,也可以在脚本中通过修改 Camera 组件的 fieldOfView 属性来动态改变视野。
  3. 清除标志(Clear Flags):
    • 用于指定摄像机在渲染画面之前如何清除屏幕。有以下几种选项:
      • Skybox:使用天空盒来清除屏幕。这是默认选项,适用于大多数 3D 场景。
      • Solid Color:使用单一颜色来清除屏幕。可以在 Inspector 面板中设置清除的颜色。
      • Depth Only:只清除深度缓冲区,不清除颜色缓冲区。适用于多个摄像机叠加的场景,以避免画面重叠。
      • Don't Clear:不清除屏幕,保留上一帧的画面。这种选项很少使用,可能会导致画面混乱。
  4. 深度(Depth):
    • 摄像机的深度决定了它在渲染顺序中的优先级。深度值较小的摄像机将先渲染,深度值较大的摄像机将在其后渲染。
    • 可以在 Inspector 面板中设置摄像机的深度值,也可以在脚本中通过修改 Camera 组件的 depth 属性来动态改变深度。

三、摄像机模式

  1. 透视模式(Perspective):
    • 模拟人眼的视觉效果,物体近大远小。适用于大多数 3D 游戏,能够营造出立体感和深度感。
    • 可以调整视野、近裁剪平面和远裁剪平面等参数来控制透视效果。
  2. 正交模式(Orthographic):
    • 没有透视效果,物体在各个方向上的大小相同。适用于 2D 游戏或需要精确尺寸显示的场景,如策略游戏、模拟经营游戏等。
    • 可以调整大小(Size)参数来控制正交摄像机的观察范围。

四、脚本控制

可以通过编写脚本来控制摄像机的行为,实现各种动态效果。以下是一些常见的脚本控制方法:

  1. 摄像机跟随:
    • 使摄像机跟随一个特定的目标物体移动,如玩家角色。可以通过计算目标物体的位置和摄像机的位置之间的差值,然后逐渐移动摄像机来实现平滑的跟随效果。
    • 以下是一个简单的摄像机跟随脚本示例
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform target;
    public float smoothSpeed = 0.125f;
    public Vector3 offset;

    void LateUpdate()
    {
        Vector3 desiredPosition = target.position + offset;
        Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
        transform.position = smoothedPosition;
        transform.LookAt(target);
    }
}
  1. 摄像机切换:
    • 在不同的场景或情况下切换不同的摄像机视角。可以通过激活和禁用不同的摄像机来实现切换效果。
    • 例如,可以在游戏中设置多个摄像机,分别用于主视角、第三人称视角和小地图视角,然后根据玩家的操作或游戏状态切换不同的摄像机。
    • oldCamera.enable = false;
    • newCamera.enable=true
    • using UnityEngine;
      
      public class ExampleScript : MonoBehaviour {
          public Camera firstPersonCamera;
          public Camera overheadCamera;
      
          // Call this function to disable FPS camera,
          // and enable overhead camera.
          public void ShowOverheadView() {
              firstPersonCamera.enabled = false;
              overheadCamera.enabled = true;
          }
          
          // Call this function to enable FPS camera,
          // and disable overhead camera.
          public void ShowFirstPersonView() {
              firstPersonCamera.enabled = true;
              overheadCamera.enabled = false;
          }
      }

  2. 摄像机震动:
    • 模拟摄像机的震动效果,如爆炸、撞击等。可以通过在脚本中随机改变摄像机的位置和旋转来实现震动效果。
    • 以下是一个简单的摄像机震动脚本示例:
using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public float shakeDuration = 0.5f;
    public float shakeMagnitude = 0.1f;

    private Vector3 originalPosition;
    private Quaternion originalRotation;
    private float shakeTimer = 0f;

    void Start()
    {
        originalPosition = transform.position;
        originalRotation = transform.rotation;
    }

    void Update()
    {
        if (shakeTimer > 0)
        {
            transform.position = originalPosition + Random.insideUnitSphere * shakeMagnitude;
            transform.rotation = new Quaternion(
                originalRotation.x + Random.Range(-shakeMagnitude, shakeMagnitude),
                originalRotation.y + Random.Range(-shakeMagnitude, shakeMagnitude),
                originalRotation.z + Random.Range(-shakeMagnitude, shakeMagnitude),
                originalRotation.w + Random.Range(-shakeMagnitude, shakeMagnitude)
            );
            shakeTimer -= Time.deltaTime;
        }
        else
        {
            transform.position = originalPosition;
            transform.rotation = originalRotation;
        }
    }

    public void Shake()
    {
        shakeTimer = shakeDuration;
    }
}

五、渲染设置

  1. 层(Layers):
    • 可以将场景中的物体分配到不同的层,然后通过摄像机的 Culling Mask 属性来控制哪些层的物体被摄像机渲染。
    • 例如,可以将玩家角色和敌人分配到不同的层,然后设置摄像机只渲染玩家所在的层,以提高性能。
  2. 后期处理(Post-processing):
    • Unity 提供了强大的后期处理功能,可以通过添加后期处理效果来增强游戏的视觉效果。例如,可以添加 Bloom(辉光)、Color Grading(色彩分级)、Depth of Field(景深)等效果。
    • 可以在摄像机上添加 Post-process Layer 组件,并在项目设置中配置后期处理效果。

六、性能考虑

  1. 优化渲染:
    • 合理设置摄像机的视野和裁剪平面,避免渲染不必要的物体。可以根据游戏的需求调整视野大小,以减少渲染的区域。
    • 使用层和 Culling Mask 属性来控制摄像机渲染的物体,只渲染需要显示的物体,提高性能。
  2. 避免过多的摄像机:
    • 过多的摄像机可能会导致性能下降。尽量减少不必要的摄像机,或者在需要时动态激活和禁用摄像机。
  3. 后期处理效果的性能影响:
    • 后期处理效果可能会对性能产生较大的影响。根据游戏的性能需求,合理选择和调整后期处理效果,避免过度使用复杂的效果。

六. 组件详细介绍

Unity(2022.3.41LTS) - 摄像机_第1张图片

名称: 功能:
清除标志 确定将清除屏幕的哪些部分。当使用多个摄像机绘制不同的游戏元素时,这非常方便。
背景 绘制视图中所有元素后应用于剩余屏幕的颜色,并且没有天空盒
.
剔除遮罩 包括或忽略要由 Camera 渲染的对象层。将图层分配给 Inspector 中的对象。
投影 切换摄像机模拟透视的功能。
        透视 Camera 将渲染透视完好无损的对象。
        正交 摄像机将均匀地渲染对象,没有透视感。注意:Orthographic (正交) 模式不支持延迟渲染。前向渲染
始终使用。
大小(选择 Orthographic 时) 视窗
size (摄像机的大小) 设置为 Orthographic (正交)。
FOV 轴(选择 Perspective 时) 视野轴。
        水平 Camera 使用水平视野轴。
        垂直 Camera 使用垂直视野轴。
视野(选择 Perspective 时) 摄像机的视角,沿 FOV Axis 下拉列表中指定的轴以度为单位测量。
物理相机 勾选此框可启用此摄像机的 Physical Camera 属性。

启用 Physical Camera 属性后,Unity 会使用模拟真实摄像机属性的属性(Focus LengthSensor Size 和 Lens Shift)来计算 Field of View

物理摄像机属性在 Inspector 中不可见,直到您勾选此框。
        焦距 设置相机传感器和相机镜头之间的距离(以毫米为单位)。

较低的值会导致 View (视野) 更宽,反之亦然。

更改此值时,Unity 会自动相应地更新 Field of View 属性。
        传感器类型 指定希望摄像机模拟的真实摄像机格式。从列表中选择所需的格式。

选择摄像机格式时,Unity 会自动将 Sensor Size > X 和 Y 属性设置为正确的值。

如果手动更改 Sensor Size 值,Unity 会自动将此属性设置为 Custom
        传感器尺寸 设置相机传感器的大小(以毫米为单位)。

Unity 会在您选择 Sensor Type 时自动设置 X 和 Y 值。如果需要,您可以输入自定义值。
                X 传感器的宽度。
                Y 传感器的高度。
        镜头偏移 从中心水平或垂直移动镜头。值是传感器大小的倍数;例如,沿 X 轴偏移 0.5 会使传感器偏移其水平大小的一半。

您可以使用镜头偏移来校正当相机与主体成一定角度时发生的失真(例如,会聚平行线)。

沿任一轴移动镜头,使相机视锥体倾斜。
                X 水平传感器偏移量。
                Y 垂直传感器偏移量。
        浇口拟合 用于更改分辨率门(游戏视图的大小/纵横比)相对于胶片门(Physical Camera 传感器的大小/纵横比)大小的选项。

有关分辨率门和胶片门的更多信息,请参阅有关物理摄像机的文档。
                垂直 使分辨率门与胶片门的高度相适应。

如果传感器长宽比大于游戏视图长宽比,则 Unity 会在两侧裁剪渲染的图像。

如果传感器长宽比小于游戏视图长宽比,则 Unity 会过扫描侧面的渲染图像。

选择此设置时,更改传感器宽度(传感器大小 > X 属性)不会影响渲染图像。
                水平 使分辨率门适合胶片门的宽度。

如果传感器长宽比大于游戏视图长宽比,则 Unity 会过扫描顶部和底部的渲染图像。

如果传感器长宽比小于游戏视图长宽比,Unity 会裁剪渲染图像的顶部和底部。

选择此设置时,更改传感器高度(传感器大小 > Y 属性)不会影响渲染图像。
                填补 使分辨率门适合胶片门的宽度或高度,以较小者为准。这将裁剪渲染的图像。
                过扫描 使分辨率门适合胶片门的宽度或高度,以较大者为准。这将过度扫描渲染的图像。
                没有 忽略分辨率门,只使用胶片门。这将拉伸渲染的图像以适合游戏视图纵横比
.
剪切平面 从摄像机开始和停止渲染的距离。
         将发生绘制的相对于相机最近的点。
         将发生绘制的相对于相机的最远点。
视口矩形 四个值,指示此摄像机视图将在屏幕上的绘制位置。以 Viewport Coordinates (值 0–1) 为单位进行测量。
        X 将绘制摄像机视图的起始水平位置。
        Y 将绘制摄像机视图的开始垂直位置。
        W (宽度) 屏幕上摄像机输出的宽度。
        H (高度) 屏幕上摄像机输出的高度。
深度 摄像机在绘制顺序中的位置。值较大的照相机将绘制在值较小的照相机上。
渲染路径 用于定义摄像机将使用的渲染方法的选项。
        使用 Player 设置 此摄像机将使用在播放器设置
.
        Vertex Lit 此摄像机渲染的所有对象都将渲染为 Vertex-Lit 对象。
        向前 所有对象都将使用每个材质的一个通道进行渲染。
目标纹理 对渲染纹理
,它将包含 Camera (摄像机) 视图的输出。设置此引用将禁用此摄像机渲染到屏幕的功能。
Occlusion Culling 为此摄像机启用 Occlusion Culling。遮挡剔除意味着隐藏在其他对象后面的对象不会被渲染,例如,如果它们位于墙后。有关详细信息,请参阅 Occlusion Culling。
允许 HDR 为此摄像机启用高动态范围渲染。有关详细信息,请参阅高动态范围渲染。
允许 MSAA 启用多样本抗锯齿
对于此相机。
允许动态解析 为此摄像机启用 Dynamic Resolution 渲染。看动态分辨率
了解详情。
目标显示 定义要渲染到的外部设备。介于 1 和 8 之间。

你可能感兴趣的:(#,Unity基础,unity,游戏引擎)