纳金网
标题:
实现类似地球仪般拖拽旋转的效果
[打印本页]
作者:
狂风大尉
时间:
2014-6-30 19:46
标题:
实现类似地球仪般拖拽旋转的效果
<pre>using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
private bool onDrag = false; //是否被拖拽
public float speed = 3f; //旋转速度
private float tempSpeed; //阻尼速度
private float axisX; //鼠标沿水平方向移动的增量
private float axisY; //鼠标沿垂直方向移动的增量
private float cXY; //鼠标移动的距离
/// <summary>
/// 接收鼠标按下的事件
/// </summary>
public void OnMouseDown()
{
axisX = 0f; //为移动的增量赋初值
axisY = 0f;
}
/// <summary>
/// 鼠标拖拽时的操作
/// </summary>
public void OnMouseDrag()
{
onDrag = true; //被拖拽
axisX = -Input.GetAxis("Mouse X"); //获得鼠标增量
axisY = Input.GetAxis("Mouse Y");
cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY); //计算鼠标移动的长度
if (cXY == 0f)
{
cXY = 1f;
}
}
/// <summary>
/// 计算阻尼速度
/// </summary>
/// <returns>阻尼的值</returns>
public float Rigid()
{
if (onDrag)
{
tempSpeed = speed;
}
else
{
if (tempSpeed > 0)
{
tempSpeed -= speed * 2 * Time.deltaTime / cXY; //通过除以鼠标移动长度实现拖拽越长速度减缓越慢
}
else
{
tempSpeed = 0;
}
}
return tempSpeed; //返回阻尼的值
}
/// <summary>
///
/// </summary>
public void Update()
{
gameObject.transform.Rotate(new Vector3(0, axisX, 0) * Rigid(), Space.World);
if (!Input.GetMouseButton(0))
{
onDrag = false;
}
}
}
</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://rs.narkii.com/club/)
Powered by Discuz! X2.5