如何逆时针旋转对象?

时间:2018-11-16 15:54:22

标签: c# unity3d

我找不到这个问题的单个答案。很抱歉,如果这是重复的帖子,但找不到任何内容。

我试图在Unity 2D游戏中逆时针为对象设置动画。我假设必须有一个简单的一两行代码才能执行此操作,但是我无法弄清楚。我读过的所有内容都说顺时针旋转很容易,但是Unity使逆时针旋转更加复杂吗?

2 个答案:

答案 0 :(得分:1)

在我们讨论这个问题的编码位之前。 您首先需要了解要实现的目标背后的逻辑。 逆时针只是您要旋转的角度,但取反(-)。

只需围绕对象以2D旋转即可:

using UnityEngine;

public class Example : MonoBehaviour
{
    void Update()
    {
        // Spin the object around the world origin at 20 degrees/second.
        transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
    }
}

在2D模式下,旋转轴将根据您要旋转的方向简单地变为Vector3.back或Vector3.forward

示例来自:https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html

正如“程序员”用户指出的那样:transform.Rotate可以解决这个问题,如果您不想围绕另一个对象旋转对象。

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Update()
    {
        // Rotate the object around its local X axis at 1 degree per second
        transform.Rotate(Vector3.right * Time.deltaTime);

        // ...also rotate around the World's Y axis
        transform.Rotate(Vector3.up * Time.deltaTime, Space.World);
    }
}

示例来自:https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

自从OP进一步阐明了他想要实现的目标。我将这些图像留作参考:

z = 0 z = -10

话虽如此:尝试:

 Vector3 direction = player.transform.position - iss.transform.position;
 float angle = Mathf.Atan2(dir.y, dir.x) * mathf.Rad2Deg;
 iss.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

答案 1 :(得分:0)

如果您正在使用transform.Rotate()函数,则只需取反最后一个参数即可。 默认旋转方向为顺时针旋转,因此,如果取消顺时针旋转的值,则会使旋转逆时针旋转。

示例:

public float rotationSpeed = 100f;

public void rotateClockwise()
    {
        transform.Rotate(0f, 0f, (rotationSpeed * Time.deltaTime));
    }

public void rotateCtrClockwise()
    {
        transfrom.Rotate(0f, 0f, -(rotationSpeed * Time.deltaTime));
    }