纳金网

标题: 实现类似地球仪般拖拽旋转的效果 [打印本页]

作者: 狂风大尉    时间: 2014-6-30 19:46
标题: 实现类似地球仪般拖拽旋转的效果
  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上

作者: hyui    时间: 2014-6-30 21:49
Good to know !
作者: hariboot    时间: 2014-6-30 22:07

感谢分享!
作者: HIDEOKOJIMA    时间: 2014-6-30 22:09
Thanks for sharing !
作者: Kadina    时间: 2014-7-1 08:27
Thanks for sharing !
作者: wucnj    时间: 2014-7-1 10:02
感谢分享!!!
作者: hxsdsjr    时间: 2014-7-29 20:36
好东东




欢迎光临 纳金网 (http://wwww.narkii.com/club/) Powered by Discuz! X2.5