精灵围绕其枢轴旋转

本文关键字:旋转 精灵 | 更新日期: 2023-09-27 18:30:17

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

这也完全符合我想要的方式,但我遇到的问题是,每当我触摸并拖动它,然后再次触摸并拖动它时,它都会捕捉到新位置。

我想让它做的是,当它旋转然后再次旋转时,子画面保持相同的旋转,而不是捕捉到新位置,我希望角色的角度重置为 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;

}

}

精灵围绕其枢轴旋转

精灵的角度是指旋转吗?我不确定如果你的代码中没有任何内容这样做,位置是如何变化的。它总是移动到相同的位置吗?我在可视化您的系统应该是什么样子时遇到了一点麻烦,但我希望这有所帮助。

看起来您可能想要存储以前的鼠标位置,以便您可以获得旋转每一帧的相对量。

在顶部:

Vector3 prevMousePos = Vector3.zero;

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

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

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

Vector3 mouseDiff = Input.mousePosition - prevMousePos;

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