本帖最后由 da11 于 2021-5-31 15:27 编辑
//InputManager练习1--相机根据鼠标所移动方向旋转
//InputManger.cs
//挂在相机中
//特别注意,摄像机左右移动时,要相对于世界坐标移动(Rotate方法第四个形参加上Space.World(根据世界坐标)),如果是相对于自身坐标移动,就会出现Z轴也移动的情况!!
//左右旋转移动,Vector3坐标使用的是Y轴!!
//上下旋转移动,Vector3坐标使用的是X轴!!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InputManger : MonoBehaviour
{
private Transform CameraTransform; //声明相机类字段
private float CameraX; //声明获取虚拟鼠标轴的X方向字段
private float CameraY; //声明获取虚拟鼠标轴的Y方向字段
public float CameraRotateSpeed=100; //声明镜头旋转速度,并赋值初始值100
private void Start()
{
//获取相机类引用
CameraTransform = this.transform;
}
private void Update()
{
//获取虚拟鼠标轴的X方向
CameraX = Input.GetAxis("Mouse X");
//获取虚拟鼠标轴的Y方向
CameraY = Input.GetAxis("Mouse Y");
//优化代码行,检测鼠标没有移动时,不执行以下方法,可以节省资源。
if (CameraX !=0 || CameraY != 0)
{
CameraRotateFF(CameraX, CameraY);
}
}
/// <summary>
/// 相机旋转方法
/// </summary>
/// <param name="X">虚拟鼠标轴的X方向</param>
/// <param name="Y">虚拟鼠标轴的Y方向</param>
private void CameraRotateFF(float X,float Y)
{
//InputManager练习1--相机根据鼠标所移动方向旋转
//左右旋转移动
//特别注意,摄像机左右移动时,要相对于世界坐标移动(Rotate方法第四个形参加上Space.World(根据世界坐标)),如果是相对于自身坐标移动,就会出现Z轴也移动的情况!!!
//根据Input.GetAxis("Mouse X")获取到的虚拟轴项数值,赋值给Rotate旋转
//左右旋转移动,Vector3坐标使用的是Y轴!!
CameraTransform.Rotate(0, X * Time.deltaTime * CameraRotateSpeed, 0, Space.World);
//上下旋转移动
//上下旋转移动只需要按照自身旋转即可
//上下旋转移动,Vector3坐标使用的是X轴!! 这里需要在X轴前加上负号-
CameraTransform.Rotate(-Y * Time.deltaTime * CameraRotateSpeed, 0, 0);
print("X: " + X + " Y: " + Y);
}
}
|