任意旋转:
/// <summary>
/// 起始位置
/// </summary>
private Vector3 StartPosition;
/// <summary>
/// 鼠标按下的之前位置
/// </summary>
private Vector3 previousPosition;
/// <summary>
/// 鼠标按下之后的滑动距离
/// </summary>
private Vector3 offset;
/// <summary>
/// 鼠标抬起后距离初始位置的位置
/// </summary>
private Vector3 finalOffset;
void Update()
{
if (Input.GetMouseButtonDown(0)) // Input.GetMouseButtonDown(0) 当0键被按下一次
{
StartPosition = Input.mousePosition;
previousPosition = Input.mousePosition;
}
if (Input.GetMouseButton(0)) // Input.GetMouseButton(0) 当0键被按住持续侦测(包含down和up各一次)
{
offset = Input.mousePosition - previousPosition;
previousPosition = Input.mousePosition;
Vector3 Xoffset = new Vector3(offset.x, -offset.y, 0);
transform.Rotate(Vector3.Cross(Xoffset, Vector3.forward).normalized, offset.magnitude, Space.World);
}
if (Input.GetMouseButtonUp(0)) //Input.GetMouseButtonUp(0) 当0键放开一次
{
finalOffset = Input.mousePosition - StartPosition;
isSlide = true;
angle = finalOffset.magnitude;
}
}
限定 y轴 旋转:
public Canvas strCanvas;
/// <summary>
/// 起始位置
/// </summary>
private Vector3 StartPosition;
/// <summary>
/// 鼠标按下的之前位置
/// </summary>
private Vector3 previousPosition;
/// <summary>
/// 鼠标按下之后的滑动距离
/// </summary>
private Vector3 offset;
/// <summary>
/// 鼠标抬起后距离初始位置的位置
/// </summary>
private Vector3 finalOffset;
void Update()
{
//if (Input.GetMouseButtonDown(0))
//{
// StartPosition = Input.mousePosition; //记录鼠标按下的时候的鼠标位置
// previousPosition = Input.mousePosition; //记录下当前这一帧的鼠标位置
//}
//if (Input.GetMouseButton(0))
//{
// offset = Input.mousePosition - previousPosition; //这一帧鼠标的位置减去上一帧鼠标的位置就是鼠标的偏移量
// previousPosition = Input.mousePosition; //再次记录当前鼠标的位置,以备下一帧求offset使用。
// Vector3 Xoffset = new Vector3(offset.x, 0, 0);//过滤掉鼠标在Y轴方向上的偏移量,只保留X轴的
// transform.Rotate(Vector3.Cross(Xoffset, Vector3.forward).normalized, offset.magnitude, Space.World); //旋转
//}
//if (Input.GetMouseButtonUp(0))
//{
// finalOffset = Input.mousePosition - StartPosition; //鼠标松开时记录最后的鼠标位置
// isSlide = true; //设为true说明想在鼠标松开后让物体继续旋转一顶焦度
// angle = finalOffset.magnitude; //松开鼠标后需要继续旋转的角度,这个值是随着游戏的update调用一直在递减,否则会一直旋转下去
//}
//if (isSlide) //实现松掉鼠标后,还会继续旋转一段距离。如果想在停止后继续旋转的话就执行下面的代码
//{
// Vector3 XfinalOffset = new Vector3(finalOffset.x, 0, 0);
// transform.Rotate(Vector3.Cross(XfinalOffset, Vector3.forward).normalized, angle * 2 * Time.deltaTime, Space.World);
// if (angle > 0) //下面就是递减控制,防止无限旋转
// {
// angle -= 5;
// }
// else
// {
// angle = 0;
// }
//}
}