Unity Camera Multi-Target 项目教程
1. 项目的目录结构及介绍
unity-camera-multi-target/
├── Assets/
│ ├── CameraMultiTarget/
│ │ ├── Editor/
│ │ ├── Examples/
│ │ ├── Library/
│ │ ├── Scripts/
│ │ ├── Shaders/
│ │ ├── CameraMultiTarget.meta
│ │ ├── CameraMultiTarget.unitypackage
│ │ └── README.md
│ └── README.md
├── ProjectSettings/
└── README.md
- Assets/: 包含所有资源文件,包括脚本、着色器、示例场景等。
- CameraMultiTarget/: 核心库文件夹,包含所有与多目标相机相关的资源。
- Editor/: 包含编辑器扩展脚本。
- Examples/: 包含示例场景和资源。
- Library/: 包含库的核心文件。
- Scripts/: 包含主要的C#脚本。
- Shaders/: 包含着色器文件。
- CameraMultiTarget.meta: Unity元数据文件。
- CameraMultiTarget.unitypackage: 预构建的Unity包。
- README.md: 库的说明文档。
- README.md: 项目根目录的说明文档。
- CameraMultiTarget/: 核心库文件夹,包含所有与多目标相机相关的资源。
- ProjectSettings/: 包含Unity项目的设置文件。
- README.md: 项目根目录的说明文档。
2. 项目的启动文件介绍
项目的启动文件主要是 Assets/CameraMultiTarget/Examples/ExampleScene.unity
,这是一个示例场景,展示了如何使用多目标相机库。
3. 项目的配置文件介绍
主要的配置文件是 Assets/CameraMultiTarget/Scripts/multiTargetCamera.cs
,这是一个C#脚本,定义了多目标相机的核心逻辑和配置选项。
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Camera))]
public class multiTargetCamera : MonoBehaviour {
public List<Transform> targets;
public Vector3 offset;
public float smoothTime = 5f;
public float minZoom = 40f;
public float maxZoom = 10f;
public float zoomLimiter = 50f;
private Vector3 velocity;
private Camera cam;
private void Start() {
cam = GetComponent<Camera>();
}
private void LateUpdate() {
if (targets.Count == 0) return;
move();
zoom();
}
void zoom() {
float newZoom = Mathf.Lerp(maxZoom, minZoom, getGreatestDistance() / zoomLimiter);
cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, newZoom, Time.deltaTime);
}
void move() {
Vector3 centerPoint = getCenterPoint();
Vector3 newPosition = centerPoint + offset;
transform.position = Vector3.SmoothDamp(transform.position, newPosition, ref velocity, smoothTime);
}
float getGreatestDistance() {
var bounds = new Bounds(targets[0].position, Vector3.zero);
for (int i = 0; i < targets.Count; i++) {
bounds.Encapsulate(targets[i].position);
}
return bounds.size.x;
}
Vector3 getCenterPoint() {
if (targets.Count == 1) {
return targets[0].position;
}
var bounds = new Bounds(targets[0].position, Vector3.zero);
for (int i = 0; i < targets.Count; i++) {
bounds.Encapsulate(targets[i].position);
}
return bounds.center;
}
}
这个脚本包含以下配置选项:
- targets: 需要跟随的目标列表。
- offset: 相机位置的偏移量。
- smoothTime: 平滑移动的时间。
- minZoom: 最小缩放值。
- maxZoom: 最大缩放值。
- zoomLimiter: 缩放限制器。
通过调整这些参数,可以定制相机的跟随和缩放行为。