using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
private Transform player;
private Vector3 offsetPosition;//位置偏移
private bool isRotaing = false;
public float distance = 0;
public float sceollSpeed = 10;
public float rotaSpeed = 2;
// Start is called before the first frame update
void Start()
{
player = GameObject.FindGameObjectWithTag(Tags.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()
{
// print(Input.GetAxis("Mouse ScrollWheel")); //向后返回负值,向前返回正值
distance = offsetPosition.magnitude;
distance += Input.GetAxis("Mouse ScrollWheel")*sceollSpeed;
distance = Mathf.Clamp(distance, 2, 18);//视野拉升的距离限制2-18
offsetPosition = offsetPosition.normalized * distance;
}
void RotateView()
{
Input.GetAxis("Mouse X"); //得到鼠标在水平方向的滑动
Input.GetAxis("Mouse Y"); //得到鼠标在垂直方向的滑动
if (Input.GetMouseButtonDown(1))
{
isRotaing = true;
}
if (Input.GetMouseButtonUp(1))
{
isRotaing = false;
}
if (isRotaing)
{
transform.RotateAround(player.position, player.up, rotaSpeed * Input.GetAxis("Mouse X"));
Vector3 originalPos = transform.position;
Quaternion originaalRotation = transform.rotation;
transform.RotateAround(player.position, transform.right, -rotaSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个一个是positio你,一个是rotation
float x = transform.eulerAngles.x;
if (x<10||x>80)//当超出范围后,属性归为原来的属性,使旋转无效
{
transform.position = originalPos;
transform.rotation = originaalRotation;
}
x = Mathf.Clamp(x, 10, 80);
transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
}
offsetPosition = transform.position-player.position;//更新
}
}