Unity相机视野的缩放,旋转及跟随

首先声明,博主使用的是Unity5.3.2(64)

游戏开发中,经常会遇到相机视野的拉近,拉远以及旋转,跟随的问题,这里我们只搞一种方式


直接上代码:

using UnityEngine;
using System.Collections;

public class FollowPlayer : MonoBehaviour {

    public float scrollSpeed = 1;//相机视野缩放系数
    public float distance;//相机到目标的距离
    public float rotateSpeed = 2;//相机视野旋转系数

    private Transform player;//跟随的目标
    private Vector3 offsetPosition;//位置偏移
    private bool isRotating = false;//用来判断是否正在旋转

    // Use this for initialization
    void Start () {
        player = GameObject.FindGameObjectWithTag ("Player").transform;//获取跟随目标
        transform.LookAt (player.position);//使相机朝向目标
        offsetPosition = transform.position - player.position;//获得相机与目标的位置的偏移量
    }

    // Update is called once per frame
    void Update () {
        transform.position = offsetPosition + player.position;//实现相机跟随
        //处理视野的旋转
        RotateView();
        //处理视野的拉近拉远效果
        ScrollView();
    }

    void ScrollView(){
        distance = offsetPosition.magnitude;//得到偏移向量的长度
        distance += Input.GetAxis ("Mouse ScrollWheel")*scrollSpeed;//获取鼠标中键*相机视野缩放系数
        distance = Mathf.Clamp (distance,2.5f,15);//限定距离最小及最大值
        offsetPosition = offsetPosition.normalized * distance;//更新位置偏移
    }

    void RotateView(){
//      Input.GetAxis ("Mouse X");//得到鼠标在水平方向的滑动
//      Input.GetAxis ("Mouse Y");//得到鼠标在垂直方向的滑动
        if (Input.GetMouseButtonDown (1)) {
            isRotating = true;
        }

        if (Input.GetMouseButtonUp (1)) {
            isRotating = false;
        }

        if (isRotating) {
            Vector3 originalPos = transform.position;//保存相机当前的位置
            Quaternion originalRotation = transform.rotation;//保存相机当前的旋转
            transform.RotateAround (player.position,player.up,rotateSpeed*Input.GetAxis ("Mouse X"));//沿目标y轴在水平方向旋转
            transform.RotateAround (player.position,transform.right,-rotateSpeed*Input.GetAxis ("Mouse Y"));//沿自身x轴在竖直方向旋转
            float x = transform.eulerAngles.x;//获得x轴的角度
            if (x < 10 || x > 80) {//限制x轴的旋转在10到80之间
                transform.position = originalPos;
                transform.rotation = originalRotation;
            }
        }

        offsetPosition = transform.position - player.position;//更新位置偏移量
    }
}

你可能感兴趣的:(Unity)