using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera : MonoBehaviour
{
public GameObject Target;
public float RotateSpeed;
public float ScrollSpeed;
public float MinDistance, MaxDistance;
bool _isRotate; // 是否正在旋转
Vector3 _offsetPos; // 距 Target 的偏移量
float _distance; // 缩放距离
// Start is called before the first frame update
void Start()
{
RotateSpeed = 10;
ScrollSpeed = 1;
MinDistance = 2;
MaxDistance = 50;
_offsetPos = transform.position - Target.transform.position;
}
// Update is called once per frame
void Update()
{
//follow();
scroll();
rotate();
}
// 控制相机跟随
void follow()
{
transform.position = Target.transform.position + _offsetPos;
}
// 控制相机缩放
void scroll()
{
_distance = _offsetPos.magnitude;
if (Input.GetKey(KeyCode.Q))
{
_distance -= ScrollSpeed;
}
if (Input.GetKey(KeyCode.E))
{
_distance += ScrollSpeed;
}
_distance = Mathf.Clamp(_distance, MinDistance, MaxDistance);
_offsetPos = _offsetPos.normalized * _distance;
transform.position = Target.transform.position + _offsetPos;
}
// 控制相机旋转
void rotate()
{
if (Input.GetMouseButtonDown(0)) // 鼠标左键
{
_isRotate = true;
}
else if (Input.GetMouseButtonUp(0))
{
_isRotate = false;
}
if (_isRotate)
{
Vector3 originPos = transform.position;
Quaternion originRotate = transform.rotation;
transform.RotateAround(Target.transform.position, Target.transform.up, RotateSpeed * Input.GetAxis("Mouse X"));
transform.RotateAround(Target.transform.position, transform.right, -RotateSpeed * Input.GetAxis("Mouse Y"));
float x = transform.eulerAngles.x;
if(x<10 || x > 80)
{
transform.position = originPos;
transform.rotation = originRotate;
}
}
_offsetPos = transform.position - Target.transform.position;
transform.position = Target.transform.position + _offsetPos;
}
}