Unity Camera Multi-Target 项目教程

Unity Camera Multi-Target 项目教程

unity-camera-multi-targetUnity library to dynamically keep multiple objects in camera view项目地址:https://gitcode.com/gh_mirrors/un/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: 项目根目录的说明文档。
  • 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: 缩放限制器。

通过调整这些参数,可以定制相机的跟随和缩放行为。

unity-camera-multi-targetUnity library to dynamically keep multiple objects in camera view项目地址:https://gitcode.com/gh_mirrors/un/unity-camera-multi-target

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶婉珊Vivian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值