为了方便,写了一个脚本,使用时,将摄像机放在一个空物体下,然后将脚本附在空物体即可,使用时只需要改动每个SliderControll 的offset即可
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class CameraAction : MonoBehaviour
{
public static CameraAction instance;
public GameObject camera;//绑定摄像头
public GameObject anchor;
public GameObject LookAt;//anchor和LookAt绑定空物体
public SliderControll Angle, Dist, Rotate;
public SliderControll PosX, PosY;
private void Awake()
{
instance = this;
}
// Use this for initialization
void Start () {
Angle.IniAxis(camera.transform.rotation.eulerAngles.x);
Dist.IniAxis(Vector3.Distance(anchor.transform.position,camera.transform.position));
}
// Update is called once per frame
void Update ()
{
float angle = Angle.Updata();
if (angle != 0)
{
Angle.IniAxis(camera.transform.rotation.eulerAngles.x);
camera.transform.Translate(Vector3.up*angle);
}
float dist = Dist.Updata();
if (dist != 0)
{
camera.transform.position -= camera.transform.forward * dist;
dist = 0;
}
float rotate = Rotate.Updata();
if (rotate != 0)
{
anchor.transform.Rotate(Vector3.up * rotate);
}
Vector3 move = new Vector3(PosX.Updata(),0,PosY.Updata());
if (move != Vector3.zero)
{
anchor.transform.Translate(move);
}
camera.transform.LookAt(LookAt.transform);
}
}
[Serializable]
public class SliderControll
{
public float Offset;
private float Axis;
public float Min, Max;
public void IniAxis(float Axis)
{
this.Axis = Axis;
}
public float GetAxis()
{
return Axis;
}
public void Add(float off)
{
Offset += off;
}
public float Updata()
{
float result = Offset;
if((Axis> Max && Offset > 0) || (Axis < Min && Offset < 0))
{
if (Max != Min)
{
result = 0;
}
}
Axis += result;
Offset = 0;
return result;
}
}