我有一个下面的类,我附加到一个对象,以使其围绕其枢轴旋转。我通过检查员发送了精灵的枢轴。
这完全符合我的要求,但我遇到的问题是每当我触摸并拖动它,然后再次触摸并拖动它时,它就会捕捉到一个新的位置。
我想要它做的是,当它旋转然后再次旋转时,精灵保持相同的旋转而不会捕捉到新的位置,我希望精灵的角度重置为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;
}
}
答案 0 :(得分:0)
通过精灵的角度,你的意思是旋转?如果您的代码中没有任何内容可以执行此操作,我不确定位置是如何变化的。它总是移动到同一个位置吗?我在想象你的系统应该如何看起来有点麻烦,但我希望这会有所帮助。
您可能希望存储以前的鼠标位置,以便获得每帧旋转的相对数量。
在顶部:
Vector3 prevMousePos = Vector3.zero;
此方法有助于在玩家按下时获得位置:
void OnMouseDown(){
prevMousePos = Input.mousePosition;
}
然后在OnMouseDrag()中获取两个鼠标位置之间的差异以获得相对位置(如果您在按下后向左,向右,向上或向下移动鼠标):
Vector3 mouseDiff = Input.mousePosition - prevMousePos;
这样它会在按下后使用相对鼠标位置而不是当前鼠标位置,这样可以解决问题。