unity3D回顾1——物体跟随鼠标旋转


前言

这是本人玩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虚拟现实弄的。
介于我目前不止如何弄动图先不放。
如有问题,请各位大佬多多指点,感谢啦!

猜你喜欢

转载自blog.csdn.net/CltCj/article/details/110748704