将代码添加到Main Camera中
一.相机跟随
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour {
private Transform Player;
private Vector3 offsetPosition;//偏移位置
void Start () {
Player = GameObject.FindGameObjectWithTag(Tags.player).transform;
transform.LookAt(Player.position);
offsetPosition = transform.position - Player.position;//偏置位置 = 改变位置 - 运动位置
}
void Update () {
transform.position = offsetPosition + Player.position;
}
二.相机到角色之间距离的拉近和远离(包含相机跟随)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowPlayer : MonoBehaviour {
private Transform Player;
private Vector3 offsetPosition;//偏移位置
private bool isRotating = false;
public float distance = 0;
public float scrollSpeed = 10;
public float rotateSpeed = 1;
// Use this for initialization
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")*scrollSpeed ;// 距离= 输入/得到轴(??)乘滚动速度
distance = Mathf.Clamp(distance, 4, 18);//拉近拉远最大的距离
offsetPosition = offsetPosition.normalized * distance;//偏执位置= 偏执位置/ 标准化乘距离
}
void RotateView()
{
//Input.GetAxis("Mouse X");
//Input.GetAxis("Mouse Y");
if(Input.GetMouseButtonDown(1))//按下鼠标左键
{
isRotating = true;
}
if (Input.GetMouseButtonUp(1))//鼠标左键抬起
{
isRotating = false ;
}
if (isRotating)
{
transform.RotateAround(Player.position,Vector3.up,rotateSpeed * Input.GetAxis("Mouse X"));
Vector3 originalPos = transform.position;
Quaternion originalRotation = transform.rotation;
transform.RotateAround(Player.position,transform .right,rotateSpeed * Input.GetAxis("Mouse Y"));//影响的属性有两个,position,rotation
float x = transform.eulerAngles.x;
//x = Mathf.Clamp(x, 10, 80);
//transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z);
if (x < 30 || x>80)//当旋转超过范围的时候,我们将属性归为原来的,就是让旋转无效
{
transform.position = originalPos;
transform.position = offsetPosition;
}
}
offsetPosition = transform.position - Player.position;//更新偏置位置
}
}
在unity中的脚本显示效果