目录
一、基本概念
- 作用:摄像机决定了玩家在游戏中能够看到的内容。它就像是玩家的眼睛,从特定的位置和角度观察场景,并将场景中的物体渲染到屏幕上。
- 类型:
- 主摄像机(Main Camera):每个场景通常都有一个主摄像机,它是默认的观察视角。主摄像机的设置对游戏的整体视觉效果起着关键作用。
- 附加摄像机:可以在场景中添加多个附加摄像机,用于实现特定的效果,如分屏显示、小地图等。
二、重要属性
- 位置和旋转:
- 位置决定了摄像机在场景中的坐标。可以通过在编辑器中直接拖动摄像机或者在脚本中修改其 Transform 组件的 position 属性来调整位置。
- 旋转决定了摄像机的观察方向。可以通过在编辑器中旋转摄像机或者在脚本中修改其 Transform 组件的 rotation 属性来调整旋转。
- 视野(Field of View):
- 对于透视摄像机,视野决定了摄像机的观察范围。较大的视野会显示更多的场景,但可能会导致物体变形。较小的视野则会聚焦在较小的区域,适用于需要特写或瞄准的场景。
- 可以在 Inspector 面板中直接调整视野的值,也可以在脚本中通过修改 Camera 组件的 fieldOfView 属性来动态改变视野。
- 清除标志(Clear Flags):
- 用于指定摄像机在渲染画面之前如何清除屏幕。有以下几种选项:
- Skybox:使用天空盒来清除屏幕。这是默认选项,适用于大多数 3D 场景。
- Solid Color:使用单一颜色来清除屏幕。可以在 Inspector 面板中设置清除的颜色。
- Depth Only:只清除深度缓冲区,不清除颜色缓冲区。适用于多个摄像机叠加的场景,以避免画面重叠。
- Don't Clear:不清除屏幕,保留上一帧的画面。这种选项很少使用,可能会导致画面混乱。
- 用于指定摄像机在渲染画面之前如何清除屏幕。有以下几种选项:
- 深度(Depth):
- 摄像机的深度决定了它在渲染顺序中的优先级。深度值较小的摄像机将先渲染,深度值较大的摄像机将在其后渲染。
- 可以在 Inspector 面板中设置摄像机的深度值,也可以在脚本中通过修改 Camera 组件的 depth 属性来动态改变深度。
三、摄像机模式
- 透视模式(Perspective):
- 模拟人眼的视觉效果,物体近大远小。适用于大多数 3D 游戏,能够营造出立体感和深度感。
- 可以调整视野、近裁剪平面和远裁剪平面等参数来控制透视效果。
- 正交模式(Orthographic):
- 没有透视效果,物体在各个方向上的大小相同。适用于 2D 游戏或需要精确尺寸显示的场景,如策略游戏、模拟经营游戏等。
- 可以调整大小(Size)参数来控制正交摄像机的观察范围。
四、脚本控制
可以通过编写脚本来控制摄像机的行为,实现各种动态效果。以下是一些常见的脚本控制方法:
- 摄像机跟随:
- 使摄像机跟随一个特定的目标物体移动,如玩家角色。可以通过计算目标物体的位置和摄像机的位置之间的差值,然后逐渐移动摄像机来实现平滑的跟随效果。
- 以下是一个简单的摄像机跟随脚本示例
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);
}
}
- 摄像机切换:
- 在不同的场景或情况下切换不同的摄像机视角。可以通过激活和禁用不同的摄像机来实现切换效果。
- 例如,可以在游戏中设置多个摄像机,分别用于主视角、第三人称视角和小地图视角,然后根据玩家的操作或游戏状态切换不同的摄像机。
- 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; } }
- 摄像机震动:
- 模拟摄像机的震动效果,如爆炸、撞击等。可以通过在脚本中随机改变摄像机的位置和旋转来实现震动效果。
- 以下是一个简单的摄像机震动