using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 第三人称摄像机简单版
/// </summary>
public class CameraMove : MonoBehaviour
{
public Transform target;//摄像机的跟随目标
public float distance = 8.0f;//摄像机与目标之间的距离
private float x, y, z;
private float xSpeed = 250.0f;
private float ySpeed = 120.0f;
//限制上下移动角度
public float xMinlimit = -45.0f;
public float yMaxlimit = 45.0f;
private void Awake()
{
//注册场景加载完毕事件
// EventCenter.AddListener(EventType.SceneLoadComplete, SetTarget);
}
private void SetTarget()
{
//将标签为Player的物体设置为跟踪目标
Transform player = GameObject.FindGameObjectWithTag("Player").transform;
if (player != null && target == null)
target = player;
}
private void Start()
{
Vector3 angles = transform.eulerAngles;//获取摄像机的当前角度
x = angles.x;
y = angles.y;
z = -distance;
GoRight();
}
private void LateUpdate()
{
float temp = Input.GetAxis("Mouse ScrollWheel");//获取滚轮数值
if (target != null)
{
if (Input.GetMouseButton(0))
{
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
}
/*
else if (Input.GetMouseButton(1))
{
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
//影响玩家的Y轴旋转角度
target.rotation = Quaternion.Euler(target.rotation.x,x,target.rotation.z);
}
*/
}
//钳制上下移动的角度
y = ClampAngle(y,xMinlimit,yMaxlimit);
z += temp * 100f * 0.02f;//数值按照自己喜好设定
z = Mathf.Clamp(z,-20f,-3.0f);//距离限制,最远是距离玩家20米,最近是3米
GoRight();//作用于摄像机
}
float ClampAngle(float angle,float min,float max)
{
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle,min,max);
}
//摄像机控制位置及角度的核心方法
void GoRight()
{
if (target == null)
return;
Quaternion rotation = Quaternion.Euler(y,x,0);//摄像机角度
Vector3 position = rotation * new Vector3(0.0f,0.0f,z)+target.position;
transform.position = position;//摄像机位置
transform.rotation = rotation;//摄像机角度
}
}
摄像机跟随代码
于 2024-04-26 08:42:10 首次发布