旋转绕其旋转的精灵

时间:2016-01-13 22:41:27

标签: c# unity3d rotation

我有一个下面的类,我附加到一个对象,以使其围绕其枢轴旋转。我通过检查员发送了精灵的枢轴。

这完全符合我的要求,但我遇到的问题是每当我触摸并拖动它,然后再次触摸并拖动它时,它就会捕捉到一个新的位置。

我想要它做的是,当它旋转然后再次旋转时,精灵保持相同的旋转而不会捕捉到新的位置,我希望精灵的角度重置为0接下来就是我希望角度不断旋转。因此,如果我在正方向上旋转它,角度应该在正方向上保持增加而不会改变。例如0 ---> 360 ----> 720 ----->然后当释放鼠标时,精灵停留在相同的位置,但现在将角度设置回0.然后再次单击旋转时,它会从该确切位置旋转。

到目前为止,这是我的代码,适用于旋转,但我想修改它以实现上述方案。对此有何帮助?

public class Steering : MonoBehaviour {

float prevAngle,wheelAngle,wheelNewAngle = 0;
public SpriteRenderer sprite;
void Start () {
}  

void Update () {


}

public float GetAngle(){


    return wheelAngle;



}

void OnMouseDrag(){

    Vector3 mouse_pos = Input.mousePosition;
    Vector3 player_pos = Camera.main.WorldToScreenPoint(this.transform.position);

    mouse_pos.x = mouse_pos.x - player_pos.x;
    mouse_pos.y = mouse_pos.y - player_pos.y;

    wheelNewAngle = Mathf.Atan2 (mouse_pos.y, mouse_pos.x) * Mathf.Rad2Deg;

    if (Input.mousePosition.x > sprite.bounds.center.x) {

        wheelAngle += wheelNewAngle - prevAngle;

    } else {
        wheelAngle -= wheelNewAngle - prevAngle;

    }



    this.transform.rotation = Quaternion.Euler (new Vector3(0, 0, wheelAngle));

    Debug.Log (wheelAngle);
    prevAngle = wheelNewAngle;
}

void OnMouseUp(){


    prevAngle = wheelNewAngle;
    wheelAngle = 0;


}

}

1 个答案:

答案 0 :(得分:0)

通过精灵的角度,你的意思是旋转?如果您的代码中没有任何内容可以执行此操作,我不确定位置是如何变化的。它总是移动到同一个位置吗?我在想象你的系统应该如何看起来有点麻烦,但我希望这会有所帮助。

您可能希望存储以前的鼠标位置,以便获得每帧旋转的相对数量。

在顶部:

Vector3 prevMousePos = Vector3.zero;

此方法有助于在玩家按下时获得位置:

void OnMouseDown(){
    prevMousePos = Input.mousePosition;
}

然后在OnMouseDrag()中获取两个鼠标位置之间的差异以获得相对位置(如果您在按下后向左,向右,向上或向下移动鼠标):

Vector3 mouseDiff = Input.mousePosition - prevMousePos;

这样它会在按下后使用相对鼠标位置而不是当前鼠标位置,这样可以解决问题。