当前位置: 首页 > 知识库问答 >
问题:

精灵围绕其轴心旋转

阎烨
2023-03-14

我在下面有一个类,我将其附加到一个对象上,以使其围绕其轴旋转。我把雪碧的枢轴通过检查员送来了。

这正是我想要的效果,但是我遇到的问题是,每当我触摸并拖动它,然后再次触摸并拖动它,它就会捕捉到一个新的位置。

我想让它做的是,当它旋转,然后再次旋转时,精灵保持其相同的旋转,而不是捕捉到一个新的位置,我想精灵的角度重置为0。接下来,我想让角度持续旋转。所以如果我朝正方向旋转,角度应该在正方向上不断增加,而不是改变。。例如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个答案

艾哲
2023-03-14

你说的精灵的角度是指旋转吗?如果你的代码中没有这样做,我不确定这个位置是如何变化的。它总是移动到相同的位置吗?我很难想象你的系统应该是什么样子,但我希望这能有所帮助。

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

在顶部:

Vector3 prevMousePos = Vector3.zero;

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

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

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

Vector3 mouseDiff = Input.mousePosition - prevMousePos;

有了这个功能,它将在按下鼠标后使用相对的鼠标位置,而不是当前的位置,这将使事情变得更加顺利。

 类似资料:
  • 我想知道如何围绕它的Y轴旋转一个物体。 例如,我想旋转谷歌示例应用程序hello\u ar\u java的droid机器人https://github.com/google-ar/arcore-android-sdk/tree/master/samples/hello_ar_java围绕其Y轴,角度为alpha。

  • 现在我想把sprite的位置相应地放在我旋转的身体上。在这里我所做的 这是我怎么画的 当我运行我的代码时会发生奇怪的事情。我看到主体正确旋转,但是由于这一行所以sprite的位置始终与主体位置相同。我该怎么做呢?

  • 问题内容: 我正在用Java制作2D游戏,玩家可以通过障碍物引导多边形。多边形上下移动,游戏世界向左和向右滚动。我需要多边形绕其中心旋转,但是由于它不断地被平移,所以它绕着点旋转。尝试将其平移回原始中心,旋转并重新平移不起作用。如何获得形状的中心? 这是我在2ms计时器上的运动计算: 这是我的paintComponent方法: 其中(xPos,yPos)是屏幕的中心。 问题答案: 转换(通常)是复

  • 问题内容: 有没有一种简单的方法可以围绕图片中心旋转图片?我首先使用了AffineTransformOp。看起来很简单,而且需要,并且在一个整洁的Google会话中为矩阵找到正确的参数。所以我认为… 我的结果是这样的: 如果您忽略旋转90度的倍数的情况,这非常简单(sin()和cos()无法正确处理)。该解决方案的问题在于,它围绕图片左上角的(0,0)坐标点进行变换,而不是围绕图片中心进行正常的变

  • 我有一个球员(绿色),我想让他左右旋转。 这可以通过在其局部Y轴上旋转来轻松实现。然而,问题是播放器可能会沿其局部X轴旋转。这是一张草图: 以下是从顶部看到的视图: 我需要沿红线旋转播放器。我需要这样做,不管他现在在X轴上有什么旋转。(玩家像超人一样飞行,见第一张图片) 通过使用父对象可以很容易地解决此问题,但这在我当前的设置中是不可能的。我当前使用的代码在局部旋转时会出现奇怪的旋转: 如何在全局

  • 嗨,我正在尝试实现一个带有旋转的opengl程序 以下代码仅供参考: