【问题标题】:How can I rotate a sprite in Unity 4.3?如何在 Unity 4.3 中旋转精灵?
【发布时间】:2026-01-17 09:55:01
【问题描述】:

我想通过按左或右箭头键来旋转场景中的精灵(想想小行星中的宇宙飞船)。

我已将相关精灵放置在场景中并创建了一个脚本,但我不确定从那里去哪里。

我当前的脚本如下所示:

 using UnityEngine;
 using System.Collections;

 public class RotateLeftRight : MonoBehaviour {

    public float speed = 1.0f;
    public string axisName = "Horizontal";

    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {

        if(Input.GetKeyDown(KeyCode.LeftArrow)) {
            // left
            transform.Rotate(-1.0f, 0.0f, 0.0f);  // does nothing, just a bad guess
        }

        if(Input.GetKeyDown(KeyCode.RightArrow)) {
            // right
            transform.Rotate(1.0f, 0.0f, 0.0f);  // does nothing, just a bad guess
        }

     }
 }

我只是在不知道会发生什么的情况下编写了上面的代码(而且,毫不奇怪,似乎根本没有发生任何事情)。

任何关于如何旋转精灵和控制旋转速度的建议将不胜感激。

【问题讨论】:

  • 通读docs.unity3d.com/Documentation/ScriptReference/… 并确保脚本与您的精灵附加到同一个对象
  • 我 100% 确定脚本与恶意有关。我尝试了您提供的链接中提到的几种不同的转换方法,但我仍然没有运气。
  • 试试 Input.GetKey(KeyCode.LeftArrow) 而不是 getkeydown,这就是我所拥有的,它可以工作
  • 它在这个链接中说 getkeydown 只在按下键的帧上触发,getkey 每帧触发docs.unity3d.com/Documentation/ScriptReference/Input.html
  • 是的,GetKey 是一种更好的调用方法。也感谢您在这里的输入。

标签: rotation unity3d sprite


【解决方案1】:

我现在无法使用 Unity 进行尝试,但我的猜测是它要么仅旋转 1º,因此您无法注意到它,要么旋转 360º,因此它实际上保持不变。

试着分解你的问题:

  1. 而不是 transform.Rotate 尝试 transform.Translate(20f, 20f, 20f) 只是为了确保它能够识别输入;
  2. 使用不同的值代替1.0f,例如0.1f30.0f(我认为30.0f 会是30º,但我不确定);
  3. 尝试更改其他轴上的旋转 yz 而不是 x
  4. 使用替代定义Rotate(Vector3 axis, float angle)

希望对你有帮助!

【讨论】:

  • 这行得通。显然 1 不是一个很好的测试数字。
  • 其实用 1 就可以了。唯一重要的是了解 X、Y 和 Z 轴,@SailingJudo。您应该拓宽更多关于使用 Rotate 函数参数的知识。 (请参阅下面的答案。)
【解决方案2】:

@Sailing Judo,如果您想像*一样旋转它,这是最好的答案。再次尝试观察您的代码,而不是将 X 轴作为参数放置/更改,而是将您的值放在 Z 轴上。以圆形旋转改变 x 或 y 轴最终就像翻转硬币一样。观察并重试。

   if(Input.GetKey(KeyCode.LeftArrow)) {
        // Clockwise
        transform.Rotate(0, 0, -3.0f); // --> Instead of "transform.Rotate(-1.0f, 0.0f, 0.0f);"
    }

    if(Input.GetKey(KeyCode.RightArrow)) {
        // Counter-clockwise
        transform.Rotate(0, 0, 3.0f); // --> Instead of transform.Rotate(1.0f, 0.0f, 0.0f);
    }

【讨论】: