/// <summary>
/// 用于控制摄像机的旋转、远近
/// </summary>
public class CameraTransform : MonoBehaviour
{
public Transform player;
public float scrollSpeed; //滚轮速度
public float rotateSpeed; //旋转速度
public int scrollMin;
public int scrollMax;
public bool ____________;
public Vector3 offsetPosition; //偏移位置
public float distance;
public bool isRotate;
private Transform last;
public float distanceAway; //向后距离
public float distanceUp; //向上距离
void Start()
{
AdjustPosition();
offsetPosition = transform.position - player.transform.position;
}
void ScrollView() //滚轮控制远近
{
distance = offsetPosition.magnitude;
distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
//if (distance>5&&distance<30)
if (distance > scrollMin && distance < scrollMax)
{
offsetPosition = offsetPosition.normalized * distance;
}
}
void Update()
{
if (last!=player)
{
AdjustPosition();
last = player;
offsetPosition = transform.position - player.transform.position;
}
ScrollView();
RotateView();
transform.position = offsetPosition + player.position;
}
void AdjustPosition()
{
transform.position = player.position + Vector3.up * distanceUp - player.forward * distanceAway;
transform.LookAt(player);
}
void RotateView()
{
if (Input.GetMouseButtonDown(0))
{
isRotate = true;
}
if (Input.GetMouseButtonUp(0))
{
isRotate = false;
}
if (isRotate)
{
Vector3 originalPosition = transform.position;
Quaternion originalRotation = transform.rotation;
transform.RotateAround(player.position, Vector3.up, rotateSpeed * Input.GetAxis("Mouse X"));
transform.RotateAround(player.position, -transform.right, rotateSpeed * Input.GetAxis("Mouse Y"));
float x = transform.eulerAngles.x;
if (x < 5 || x > 85) //上下观看角度
{
transform.position = originalPosition;
transform.rotation = originalRotation;
}
offsetPosition = transform.position - player.position;
}
}
}
Unity 用于控制摄像机的旋转、远近
猜你喜欢
转载自blog.csdn.net/weixin_43705303/article/details/94462762
今日推荐
周排行