您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    unity3D 鼠标操作脚本
    时间:2015-02-10 09:56 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    模拟MAX的鼠标操作脚本


    直接贴出代码:


    var target:Transform;
    var targetOffset:Vector3;
    var distance:float = 5.0f;
    var maxDistance:float = 20;
    var minDistance:float = .6f;
    var xSpeed:float = 200.0f;
    var ySpeed :float= 200.0f;
    var yMinLimit:int= -80;
    var yMaxLimit:int= 80;
    var zoomRate:int= 40;
    var panSpeed:float= 0.3f;
    var zoomDampening:float= 5.0f;
    var xDeg:float= 0.0f;
    var yDeg:float= 0.0f;
    var currentDistance:float;
    var desiredDistance:float;
    var currentRotation:Quaternion;
    var desiredRotation:Quaternion;
    var rotation:Quaternion;
    var position:Vector3;
    function Start() { Init(); }
    function OnEnable() { Init(); }
    public function Init()
    {
    if (!target)            //如果变换目标为没有,则生成变换位置物体,如果有自己的视角中心,这句可以不要
    {
    var go:GameObject= new GameObject("Cam Target");
    go.transform.position = transform.position + (transform.forward * distance);
    target = go.transform;
    }
    transform.position=Vector3(989.2558,6.647173,1004.832);//初始化相机位置
    transform.rotation=Vector3(10.7943,119.1996,0.002801279);
    distance = Vector3.Distance(transform.position, target.position);
    currentDistance = distance;
    desiredDistance = distance;
    position = transform.position;
    rotation = transform.rotation;
    currentRotation = transform.rotation;
    desiredRotation = transform.rotation;
    xDeg = Vector3.Angle(Vector3.right, transform.right );
    print(xDeg);
    yDeg = Vector3.Angle(Vector3.up, transform.up );
    }
    function LateUpdate()
    {
    
    //旋转
    if (Input.GetMouseButton(0))        
    {
    xDeg += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
    yDeg -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
    yDeg = ClampAngle(yDeg, yMinLimit, yMaxLimit);
    desiredRotation = Quaternion.Euler(yDeg, xDeg, 0);
    currentRotation = transform.rotation;
    rotation = Quaternion.Lerp(currentRotation, desiredRotation, Time.deltaTime * zoomDampening);
    transform.rotation = rotation;
    }
    
    //平移
    if (Input.GetMouseButton(1))        
    {
    target.rotation = transform.rotation;
    target.Translate(Vector3.right * -Input.GetAxis("Mouse X") * panSpeed);
    target.Translate(transform.up * -Input.GetAxis("Mouse Y") * panSpeed, Space.World);
    }
    //放大缩小
    desiredDistance -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime*zoomRate * Mathf.Abs(desiredDistance);
    desiredDistance = Mathf.Clamp(desiredDistance, minDistance, maxDistance);
    currentDistance = Mathf.Lerp(currentDistance, desiredDistance, Time.deltaTime * zoomDampening);
    position = target.position - (rotation * Vector3.forward * currentDistance + targetOffset);
    transform.position = position;
    }
    static function ClampAngle (angle : float, min : float, max : float) {
    if (angle < -360)
    angle += 360;
    if (angle > 360)
    angle -= 360;
    return Mathf.Clamp (angle, min, max);
    }



    可以复制代码去测试下哟。。。

    记得留下您宝贵的意见哟。。。

    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。