unity 摄像头跟踪目标

参考官网实例:http://wiki.unity3d.com/index.php?title=MouseOrbitImproved

using UnityEngine;
using System.Collections;

public class Follow : MonoBehaviour
{
    // 目标对象
    public Transform targetObj = null;

    // 摄像头与目标的最远距离
    public float maxDistance = 100;

    // 摄像头与目标的最小距离
    public float minDistance = 1;

    // 摄像头与目标的当前距离
    public float currentDistance = 50;

    // 滚轮与距离的控制粒度,值越大,粒度越大;反之越小
    public float scrollWheelSpeed = 3;

    public Vector3 velocity = Vector3.zero;

    // public Vector3 direct = new Vector3(0, 0, 1);

    private float rotateX = 0.0f;

    void Start()
    {
        Cursor.visible = false;
    }

    void LateUpdate()
    {
        if (null == this.targetObj)
            return;

        FollowTarget();
        RotateCamera();
    }

    /// <summary>
    /// 跟随目标
    /// </summary>
    private void FollowTarget()
    {
        // 鼠标滚轮值
        float scrollWheel = Input.GetAxis("Mouse ScrollWheel");

        this.currentDistance -= scrollWheel * this.scrollWheelSpeed;
        this.currentDistance = Mathf.Clamp(this.currentDistance, this.minDistance, this.maxDistance);

        Vector3 vector = new Vector3(0, 1.5f, this.currentDistance * -1);
        vector = this.targetObj.TransformVector(vector);

        this.transform.LookAt(this.targetObj.position);
        Vector3 targetPosition = this.targetObj.transform.position + vector;
        this.transform.position = Vector3.SmoothDamp(this.transform.position, targetPosition, ref velocity, 0.3f);
    }

    /// <summary>
    /// 鼠标控制摄像头旋转代码
    /// </summary>
    private void RotateCamera()
    {
        this.rotateX += Input.GetAxis("Mouse X");
        this.targetObj.rotation = Quaternion.Euler(0, this.rotateX, 0);
    }
}

猜你喜欢

转载自blog.csdn.net/zhanghui_hn/article/details/51024985