在玩游戏时会使用鼠标调节自己的视野 这时就用到相机的旋转和移动了
鼠标滑轮控制镜头的远近
Input.GetAxis(“Mouse ScrollWheel”)滑轮向上返回值为正 滑轮向下为负
镜头的远近 也就是相机在正前方离物体的远近用 transform.Translate(Vector3.forward * 1f);来改变相机的位置
先上代码
public class MoveCamera : MonoBehaviour
{
private float speed=10;
private float endX = 80;
public Vector3 dis;
float a;
private GameObject player;
bool isrotate = false;
// Start is called before the first frame update
void Start()
{
//if (transform.position.x > endX)
//{
// transform.Translate(Vector3.forward * speed * Time.deltaTime);
//}
player = GameObject.FindGameObjectWithTag("Player");
transform.LookAt(player.transform.position);
dis = gameObject.transform.position - player.transform.position;
}
// Update is called once per frame
void Update()
{
}
private void FixedUpdate()
{
gameObject.transform.position = dis + player.transform.position;
gameObject.transform.LookAt(player.transform.position);
Rotate();
ScrollWheel();
}
//相机的拉远拉近
public void ScrollWheel()
{
// a = Camera.main.fieldOfView;
a = dis.magnitude;//返回向量的长度,也就是点P(x,y,z)到原点(0,0,0)的距离
a += Input.GetAxis("Mouse ScrollWheel") * speed;
// transform.position = new Vector3(transform.position.x, transform.position.y + a, transform.position.z);
// Camera.main.fieldOfView = a;
// transform.Translate(Vector3.forward * a * 3f);
a = Mathf.Clamp(a, 2, 18);
dis = dis.normalized * a;//单位向量
}
//相机的旋转
public void Rotate()
{
if(Input.GetMouseButtonDown(1))
{
isrotate = true;
}
if (Input.GetMouseButtonUp(1))
{
isrotate = false;
}
float mouse_x = Input.GetAxis("Mouse X");
float mouse_y = Input.GetAxis("Mouse Y");
if(isrotate)
{
transform.RotateAround(player.transform.position, player.transform.up, mouse_x*5f);
Vector3 origposition = transform.position;
Quaternion origRotate = transform.rotation;
transform.RotateAround(player.transform.position, player.transform.right, mouse_y * 5f);
float x = transform.eulerAngles.x;
if(x<10||x>80)//限制旋转大小
{
transform.position = origposition;
transform.rotation = origRotate;
}
}
dis = transform.position - player.transform.position;
}
}
物体旋转:按下鼠标右键物体相机会随着鼠标滑动的方向旋转
transform.RotateAround(vector3: 围绕旋转的物体的位置,vector3: 旋转的方向,float:旋转的角度);
在实际游戏中会控制最大旋转角度用 Mathf.Clamp函数来限制
static function Clamp (value : float, min :float, max : float) : float
限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
static function Clamp (value : int, min :int, max : int) : int
限制value的值在min和max之间,并返回value。