查看: 2103|回复: 6
打印 上一主题 下一主题

[其他] 实现类似地球仪般拖拽旋转的效果

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-6-30 19:46:44 |只看该作者 |倒序浏览
  1. <pre>using UnityEngine;
  2. using System.Collections;

  3. public class NewBehaviourScript : MonoBehaviour {

  4.     private bool onDrag = false;                                          //是否被拖拽
  5.     public float speed = 3f;                                              //旋转速度
  6.     private float tempspeed;                                              //阻尼速度
  7.     private float axisX;                                                  //鼠标沿水平方向移动的增量
  8.     private float axisY;                                                  //鼠标沿垂直方向移动的增量
  9.     private float cXY;                                                          //鼠标移动的距离


  10.     /// <summary>
  11.     /// 接收鼠标按下的事件
  12.     /// </summary>
  13.     public void OnMouseDown()
  14.     {
  15.         axisX = 0f;                                                          //为移动的增量赋初值
  16.         axisY = 0f;
  17.     }

  18.     /// <summary>
  19.     /// 鼠标拖拽时的操作
  20.     /// </summary>
  21.     public void OnMouseDrag()
  22.     {
  23.         onDrag = true;                                                      //被拖拽
  24.         axisX = -Input.GetAxis("Mouse X");                                  //获得鼠标增量
  25.         axisY = Input.GetAxis("Mouse Y");
  26.         cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY);                  //计算鼠标移动的长度
  27.         if (cXY == 0f)
  28.         {
  29.             cXY = 1f;
  30.         }
  31.     }

  32.     /// <summary>
  33.     /// 计算阻尼速度
  34.     /// </summary>
  35.     /// <returns>阻尼的值</returns>
  36.     public float Rigid()
  37.     {
  38.         if (onDrag)
  39.         {
  40.             tempSpeed = speed;
  41.         }
  42.         else
  43.         {
  44.             if (tempSpeed > 0)
  45.             {
  46.                 tempSpeed -= speed * 2 * Time.deltaTime / cXY;        //通过除以鼠标移动长度实现拖拽越长速度减缓越慢
  47.             }
  48.             else
  49.             {
  50.                 tempSpeed = 0;
  51.             }
  52.         }
  53.         return tempSpeed;                                                  //返回阻尼的值
  54.     }

  55.     /// <summary>
  56.     ///
  57.     /// </summary>
  58.     public void Update()
  59.     {
  60.         gameObject.transform.Rotate(new Vector3(0, axisX, 0) * Rigid(), Space.World);
  61.         if (!Input.GetMouseButton(0))
  62.         {
  63.             onDrag = false;
  64.         }
  65.     }
  66. }
  67. </pre><div></div>
复制代码
创建一个Sphere,直接把以上代码附加在Sphere上
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-6-30 21:49:06 |只看该作者
Good to know !
回复

使用道具 举报

3

主题

1

听众

6189

积分

高级设计师

Rank: 6Rank: 6

纳金币
370
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-6-30 22:07:03 |只看该作者

感谢分享!
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-6-30 22:09:07 |只看该作者
Thanks for sharing !
回复

使用道具 举报

0

主题

2

听众

4092

积分

中级设计师

Rank: 5Rank: 5

纳金币
530
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-7-1 08:27:32 |只看该作者
Thanks for sharing !
回复

使用道具 举报

wucnj    

1

主题

1

听众

3160

积分

中级设计师

Rank: 5Rank: 5

纳金币
1065
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-7-1 10:02:03 |只看该作者
感谢分享!!!
回复

使用道具 举报

0

主题

1

听众

569

积分

初级设计师

Rank: 3Rank: 3

纳金币
155
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2014-7-29 20:36:56 |只看该作者
好东东
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-13 19:33 , Processed in 0.331885 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部