在游戏和一些产品展示等项目中会有让摄像机围绕某个物体进行旋转这种需求
下面展示的代码是个删减版的 只保留了主要功能 限制的方面都删除了
在原有的代码中有 移动摄像机功能 围绕的点不做限制每帧都在变化 还有移动的范围限制 旋转的角度限制 还有触发层级的限制 UI误触限制等。。
使用的过程中可以根据自己的需求来添加
在实际的使用中可能会有限制的需求 比如最大远离多少 最近距离多少 不能旋转到地面以下等
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//摄像机操作
//删减版 在实际的使用中可能会有限制的需求 比如最大远离多少 最近距离多少 不能旋转到地面以下等
public class CamCtrl : MonoBehaviour
{
public Transform CenObj;//围绕的物体
private Vector3 Rotion_Transform;
private new Camera camera;
void Start()
{
camera = GetComponent<Camera>();
Rotion_Transform = CenObj.position;
}
void Update()
{
Ctrl_Cam_Move();
Cam_Ctrl_Rotation();
}
//镜头的远离和接近
public void Ctrl_Cam_Move()
{
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
transform.Translate(Vector3.forward * 1f);//速度可调 自行调整
}
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
transform.Translate(Vector3.forward * -1f);//速度可调 自行调整
}
}
//摄像机的旋转
public void Cam_Ctrl_Rotation()
{
var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动
var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动
if (Input.GetKey(KeyCode.Mouse1))
{
transform.RotateAround(Rotion_Transform, Vector3.up, mouse_x * 5);
transform.RotateAround(Rotion_Transform, transform.right, mouse_y * 5);
}
}
}