相机跟随的方式- 通过键盘控制相机旋转

创建4个空物体,将相机放到最子层

1:y控制左右旋转

2:z控制上下旋转

3:照着主角

4:z修改相机缩放

主相机用来做震动之类的其他功能

下边的脚本添加到 1 上.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraCtrl : MonoBehaviour {

    [SerializeField]
    Transform CameraUpAndDown;
    [SerializeField]
    Transform CameraZoonContainer;
    [SerializeField]
    Transform CameraContainer;

    public static CameraCtrl _instance;


    void Awake() {
        _instance = this;
        Init();
    }

    void Init()
    {
        CameraUpAndDown.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(CameraUpAndDown.localEulerAngles.z, 35, 80));
    }
    /// <summary>
    /// 设置摄像机旋转
    /// </summary>
    /// <param name="type">0=左 1=右</param>
    public void SetCameraRotate(int type)
    {
        transform.Rotate(0, 100 * Time.deltaTime * (type == 0 ? -1 : 1), 0);
    }

    /// <summary>
    /// 设置摄像机上下
    /// </summary>
    /// <param name="type">0=上,1=下</param>
    public void SetCameraUpAndDown(int type)
    {
        CameraUpAndDown.Rotate(0, 0, Time.deltaTime * 30 * (type == 0 ? -1 : 1));
        CameraUpAndDown.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(CameraUpAndDown.localEulerAngles.z, 1, 40));
    }

    /// <summary>
    /// 设置摄像机缩放
    /// </summary>
    /// <param name="type">0=拉近,1=拉远</param>
    public void SetCamerZoon(int type)
    {
        CameraContainer.Translate(new Vector3(0,0,Time.deltaTime * 5*(type ==0?-1:1)));
        CameraContainer.transform.localPosition = new Vector3(0, 0, Mathf.Clamp(CameraContainer.transform.localPosition.z, -5, 0));
    }


    public void AutoLookAt(Vector3 pos)
    {
        CameraZoonContainer.LookAt(pos);
    }
}

这个方法可以添加到主角上,在Update中调用

void AutoFllow()
    {

        CameraCtrl._instance.transform.position = transform.position;
        CameraCtrl._instance.AutoLookAt(transform.position);

        if (Input.GetKey(KeyCode.A))
        {
            CameraCtrl._instance.SetCameraRotate(0);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            CameraCtrl._instance.SetCameraRotate(1);
        }
        else if (Input.GetKey(KeyCode.W))
        {
            CameraCtrl._instance.SetCameraUpAndDown(0);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            CameraCtrl._instance.SetCameraUpAndDown(1);
        }
        else if (Input.GetKey(KeyCode.Q))
        {
            CameraCtrl._instance.SetCamerZoon(0);
        }
        else if (Input.GetKey(KeyCode.E))
        {
            CameraCtrl._instance.SetCamerZoon(1);
        }
    }

猜你喜欢

转载自www.cnblogs.com/what-lee/p/9333763.html