【Unity3D自学记录】实现地球仪般拖拽旋转的效果

01 using UnityEngine;
02 using System.Collections;
03  
04 public class NewBehaviourScript : MonoBehaviour {
05  
06     private bool onDrag = false;                                      //是否被拖拽
07     public float speed = 3f;                                          //旋转速度
08     private float tempSpeed;                                          //阻尼速度
09     private float axisX;                                              //鼠标沿水平方向移动的增量
10     private float axisY;                                              //鼠标沿垂直方向移动的增量
11     private float cXY;                                                //鼠标移动的距离
12  
13  
14     /// <summary>
15     /// 接收鼠标按下的事件
16     /// </summary>
17     public void OnMouseDown()
18     {
19         axisX = 0f;                                                   //为移动的增量赋初值
20         axisY = 0f;
21     }
22  
23     /// <summary>
24     /// 鼠标拖拽时的操作
25     /// </summary>
26     public void OnMouseDrag()
27     {
28         onDrag = true;                                                //被拖拽
29         axisX = -Input.GetAxis("Mouse X");                            //获得鼠标增量
30         axisY = Input.GetAxis("Mouse Y");
31         cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY);              //计算鼠标移动的长度
32         if (cXY == 0f)
33         {
34             cXY = 1f;
35         }
36     }
37  
38     /// <summary>
39     /// 计算阻尼速度
40     /// </summary>
41     /// <returns>阻尼的值</returns>
42     public float Rigid()
43     {
44         if (onDrag)
45         {
46             tempSpeed = speed;
47         }
48         else
49         {
50             if (tempSpeed > 0)
51             {
52                 tempSpeed -= speed * 2 * Time.deltaTime / cXY;        //通过除以鼠标移动长度实现拖拽越长速度减缓越慢
53             }
54             else
55             {
56                 tempSpeed = 0;
57             }
58         }
59         return tempSpeed;                                             //返回阻尼的值
60     }
61  
62     /// <summary>
63     ///
64     /// </summary>
65     public void Update()
66     {
67         gameObject.transform.Rotate(new Vector3(0, axisX, 0) * Rigid(), Space.World);
68         if (!Input.GetMouseButton(0))
69         {
70             onDrag = false;
71         }
72     }
73 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值