mouselook-物体跟随鼠标旋转
前言
这是本人玩unity的回顾,一些脚本分享
一、mouselook
1.1、用于旋转
考虑到有三种不同类型的旋转行为(水平转、垂直转、水平+垂直),就相当于旋转包括这三类,于是用枚举定义三者(枚举类型是一种值类型,它用于声明一组命名的常数)
public enum RorationAxes //定义枚举数据结构,将名称和设置结合起来
{
MouseXAndY = 0,
MouseX = 1,
MouseY = 2
}
声明一个该枚举的公有变量,这将在Inspector中显示下拉菜单
public RorationAxes axes = RorationAxes.MouseXAndY;
1.2、水平旋转
void Update () {
if (axes==RorationAxes.MouseX)
{
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
}
1.3、垂直旋转
Rotate()方法只能用于没有限制的增加旋转值,适合水平转
但是垂直转需要限制视野上下倾斜的程度
_rotationX-----垂直绕X轴旋转可以保持角度
public float sensitivityVert = 9.0f;//垂直转
public float miniumVert = -45.0f;
public float maxinumVert = 45.0f;
public float _rotationX = 0;//为垂直角度声明一个角度变量,X代表X轴
//Mathf.Clamp用于将旋转角度保持在最小值和最大值之间
//Clamp()方法不止用于旋转,他通常用于确保一个数值变量在限制的范围内
else if (axes == RorationAxes.MouseY)
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, miniumVert, maxinumVert);
float rotationY = transform.localEulerAngles.y;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
由于transform的angle属性是Vector3,因此需要把旋转角度值传给构造函数,创建一个新的Vector3
欧拉角(Euler angle)和四元数(Quaternion)
参考www.flipcode.com/documents/matrfaq.html-Q47
1.4、水平+垂直旋转
else
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, miniumVert, maxinumVert);
float delat = Input.GetAxis("Mouse X") * sensitivityHor;//delat------是旋转的变化量
float rotationY = transform.localEulerAngles.y + delat;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
}
//使用delat递增旋转角度
void Start()
{
Rigidbody body = GetComponent<Rigidbody>();
if (body != null)
body.freezeRotation = true;
}
代码如下(示例):
这段代码:
鼠标输入脚本通常在玩家的Rigidbody上设置freezeRotation属性。
if (body != null)用于检测这个组件是否存在
二、测试效果
程序是之前跟着一本Unity虚拟现实弄的。
介于我目前不止如何弄动图先不放。
如有问题,请各位大佬多多指点,感谢啦!