Unity3D自带Mouse Look鼠标视角代码解析。

翻译 2016年10月17日 16:22:00

Unity3D自带Mouse Look鼠标视角代码解析。

代码块

代码块语法遵循标准markdown代码,例如:

using UnityEngine;
using System.Collections;

/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation

/// To make an FPS style character:
/// - Create a capsule.
/// - Add the MouseLook script to the capsule.
///   -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSInputController script to the capsule
///   -> A CharacterMotor and a CharacterController component will be automatically added.

/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
///   -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
    //声明一个RotationAxes枚举类
    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityX = 15F;
    public float sensitivityY = 15F;

    public float minimumX = -360F;
    public float maximumX = 360F;

    public float minimumY = -60F;
    public float maximumY = 60F;

    float rotationY = 0F;

    void Update ()
    {
        if (axes == RotationAxes.MouseXAndY)
        {
            //ransform.localEulerAngles.y表示绕父级的Y轴旋转角度;Input.GetAxi根据坐标轴名称获取虚拟坐标系中的值
            float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            //Mathf.Clamp限制rotationY值在min和max之间,如果小于min返回min,如果大于返回max,之间则返回实际的值
            rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
            //此x.y.z值按照分别围绕z旋转z,x旋转x,y旋转y的顺序执行
            transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
        }
        else if (axes == RotationAxes.MouseX)   
        {
            transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
        }
        else
        {
            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

            transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
        }
    }

    void Start ()
    {
        // Make the rigid body not change rotation
        if (rigidbody)
            //控制物理是否改变物体的旋转,如果freezeRotation被启用,旋转不会被物体模拟修改。
            //这对于创建第一人称射击游戏时是很有用的,因为玩家需要使用鼠标完全控制旋转。
            rigidbody.freezeRotation = true;
    }
}

相关文章推荐

Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理

在实现武器的切换环节中,目前采取了代码直接控制的方式,在运行中可以发现,往往武器在动画还没结束之间就直接完成了位置的切换,这样制作的动画不够逼真。我们希望能够在某个动画过程中切换武器的位置。这就需要涉...
  • wkhabc
  • wkhabc
  • 2016年08月12日 11:53
  • 1224

如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片

在项目开发的时候,有可能会有这样的一种需求:有一段视频需要展示给用户,在界面上先展示视频上的某一帧图片,用户点击的时候再去获取视频资源进行播放。这时,服务器会先给我们返回视频的url,这个时候就需要通...

unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角

贴代码: 摄像机的拉近视角代码:  public Transform target;     public float minFov = 15f;     public float maxFov = ...

unity3D鼠标滚轮来实现镜头拉近拉远及视角旋转

镜头拉近拉远的代码 在Unity开发中,用鼠标滚轮来实现摄像机移动控制视角变化或其它物体移动,代码如下: if( Input.GetAxis("Mouse ScrollWheel") != ...

【Unity3D】键盘鼠标控制视角的移动

在3D游戏里面,视角是一个很重要的因素,部分玩家对锁视角嗤之以鼻,因此视角也是游戏制作里面需要努力的方面。其实也不难,换到Unity3D里面是想办法控制摄像机的移动。下面举一个简单的例子说明在Unit...

Unity3D鼠标控制摄像机“左右移动控制视角+WASD键盘控制前后左右+空格键抬升高度”脚本

Unity3D鼠标控制摄像机“左右移动控制视角+WASD键盘控制前后左右+空格键抬升高度”脚本...

Unity3D 自带Shader

  • 2016年04月18日 10:38
  • 156KB
  • 下载

真Unity3d_自带默认寻路插件NavMesh入门完全解析

关于赵哥:阿赵我从事游戏这个行业是从2008年开始的,接触的就是网页游戏。当时,网页游戏还是一个比较新的东西,在一般人的印象中,网页游戏都是那种flash小游戏。那时候出现了三国风云这样的模拟策略游戏...
  • avi9111
  • avi9111
  • 2017年06月14日 00:07
  • 694

Unity3D 自带手机陀螺仪程序

  • 2015年07月08日 18:27
  • 1023B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D自带Mouse Look鼠标视角代码解析。
举报原因:
原因补充:

(最多只允许输入30个字)