zoukankan      html  css  js  c++  java
  • 【狼】unity 鼠标拖拽物体实现任意角度自旋转

    主要涉及函数

    Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量

    Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量

    通过勾股定理获取拖拽长度,长度越长旋转越快

    在project setting--Input 可以设置

    直接上代码,看了就明白了

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class startRoate : MonoBehaviour
     5 {
     6     private bool onDrag = false;  //是否被拖拽//    
     7     public float speed = 6f;   //旋转速度//    
     8     private float tempSpeed;   //阻尼速度// 
     9     private float axisX = 1;
    10     //鼠标沿水平方向移动的增量//   
    11     private float axisY = 1;    //鼠标沿竖直方向移动的增量//   
    12     private float cXY;
    13     void OnMouseDown()
    14     {
    15         //接受鼠标按下的事件// 
    16 
    17         axisX = 0f; axisY = 0f;
    18     }
    19     void OnMouseDrag()     //鼠标拖拽时的操作// 
    20     {
    21 
    22             onDrag = true;
    23             axisX = -Input.GetAxis("moveX");
    24             //获得鼠标增量// 
    25             axisY = Input.GetAxis("moveY");
    26             cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY); //计算鼠标移动的长度//
    27             if (cXY == 0f) { cXY = 1f; }
    28 
    29     }
    30     float Rigid()      //计算阻尼速度//    
    31     {
    32         if (onDrag)
    33         {
    34             tempSpeed = speed;
    35         }
    36         else
    37         {
    38             if (tempSpeed > 0)
    39             {
    40                 tempSpeed -= speed * 2 * Time.deltaTime / cXY; //通过除以鼠标移动长度实现拖拽越长速度减缓越慢// 
    41             }
    42             else { 
    43                 tempSpeed = 0; 
    44             }
    45         }
    46         return tempSpeed;
    47     }
    48 
    49     void Update()
    50     {
    51        // this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //这个是是按照之前方向一直慢速旋转
    52         if (!Input.GetMouseButton(0))
    53         { 
    54             onDrag = false;
    55             this.transform.Rotate(new Vector3(axisY, axisX, 0)*0.5f, Space.World); 
    56         }
    57     }
    58 }
  • 相关阅读:
    路由器远程登陆的方式
    路由器上的DNS服务器构建
    路由器配置维护技巧---管道的应用
    【转】常见面试问题
    英文面试决胜关键
    12个有趣的c语言面试题
    16道嵌入式C语言面试题(经典)
    LCD 调试总结
    关于uboot的一些优化
    linux驱动开发的经典书籍
  • 原文地址:https://www.cnblogs.com/zhanlang96/p/3811260.html
Copyright © 2011-2022 走看看