精灵围绕其枢轴旋转
本文关键字:旋转 精灵 | 更新日期: 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;
这样,它将在按下后使用相对鼠标位置而不是当前位置,这应该可以解决问题。