使用的是Input输入,使用时只需要挂在相机上然后指定目标即可。
按住鼠标右键旋转,滚轮缩放,V键切换第一第三人称。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveCamera : MonoBehaviour {
public Transform player;
bool isRotate;
Vector3 offsetPosition;
float movedistanceV = 2f;
float movedistanceH = 5f;
float distance;
public float scrollspeed;
public float rotatespeed;
float smooth = 3;
bool thridPerson;
Vector3 targetPosition;
void Start () {
offsetPosition = transform.position - player.position;
thridPerson = true;
}
// Update is called once per frame
void Update () {
ChangeState();
ScrollView();
RotateView();
FollowView();
}
void ChangeState()
{
if(Input.GetKeyDown(KeyCode.V))
{
thridPerson = !thridPerson;
}
}
void ScrollView()
{
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (Camera.main.fieldOfView >= 30)
{
Camera.main.fieldOfView -= 5;
}
}
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (Camera.main.fieldOfView <= 70)
{
Camera.main.fieldOfView += 5;
}
}
}
void RotateView()
{
if(Input.GetMouseButtonDown(1))
{
isRotate = true;
}
if(Input.GetMouseButtonUp(1))
{
isRotate = false;
}
if(isRotate)
{
transform.RotateAround(player.position, Vector3.up, rotatespeed * Input.GetAxis("Mouse X"));
transform.RotateAround(player.position, Vector3.up, rotatespeed * Input.GetAxis("Mouse Y"));
Vector3 originPosition = transform.position;
Quaternion originRotation = transform.rotation;
if(transform.eulerAngles.x<30||transform.eulerAngles.x>80)
{
transform.position = originPosition;
transform.rotation = originRotation;
}
offsetPosition = transform.position - player.position;
}
}
void FollowView()
{
//第三人称
if (thridPerson)
{
targetPosition = player.position + Vector3.up * movedistanceV - Vector3.forward * movedistanceH;
}
else
{
targetPosition = player.position;
}
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * scrollspeed * smooth);
}
}