在游戏开发中,我们经常需要通过鼠标拖拽对模型进行旋转的操作,这里我介绍一种实现方法:
Using Unityengine;
Using System.Collections;
Public Class Dragrotate : Monobehaviour
{
Private Bool Ondrag = False; //是否被拖拽//
Public Float Speed = 6f; //旋转速度//
Private Float Tempspeed; //阻尼速度//
Private Float Axisx; //鼠标沿水平方向移动的增量//
Private Float Axisy; //鼠标沿竖直方向移动的增量//
Private Float Cxy; //鼠标移动的距离//
Void Onmousedown(){ //接受鼠标按下的事件//
Axisx=0f;
Axisy=0f;
}
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;
}
}
Float Rigid () //计算阻尼速度//
{
If (Ondrag) {
Tempspeed = Speed;
} Else {
If (Tempspeed > 0) {
Tempspeed -= Speed*2 * Time.Deltatime / Cxy; //通过除以鼠标移动长度实现拖拽越长速度减缓越慢//
} Else {
Tempspeed = 0;
}
}
Return Tempspeed;
}
Void Update ()
{
Gameobject.Transform.Rotate (New Vector3 (Axisy, Axisx, 0) * Rigid (), Space.World);
If (!Input.Getmousebutton (0)) {
Ondrag = False;
}
}
}
本算法通过Input.Getaxis ()分别获取鼠标在水平和垂直方向的增量,然后计算鼠标移动的距离,以此来确定模型被旋转的角度,以及阻尼效果的大小。通过Rigid()函数得出旋转速度的增量,以实现平缓的旋转效果。
把本脚本附加到希望被旋转的模型,即可实现鼠标控制模型的全方位旋转。