如何在 Unity 4.3 中旋转精灵?

Posted

技术标签:

【中文标题】如何在 Unity 4.3 中旋转精灵?【英文标题】:How can I rotate a sprite in Unity 4.3? 【发布时间】:2013-11-18 21:13:24 【问题描述】:

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

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

我当前的脚本如下所示:

 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 是一种更好的调用方法。也感谢您在这里的输入。 【参考方案1】:

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

试着分解你的问题:

    而不是 transform.Rotate 尝试 transform.Translate(20f, 20f, 20f) 只是为了确保它能够识别输入; 使用不同的值代替1.0f,例如0.1f30.0f(我认为30.0f 会是30º,但我不确定); 尝试更改其他轴上的旋转 yz 而不是 x; 使用替代定义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);
    

【讨论】:

以上是关于如何在 Unity 4.3 中旋转精灵?的主要内容,如果未能解决你的问题,请参考以下文章

Unity 4.3 2d 以编程方式创建 Sprite

带有一些旋转元素的 Unity 导入图集

无法强制我的精灵顺利移动/旋转

如何在精灵套件中旋转精灵节点?

Unity - 围绕 2D 中的点旋转对象

如何在 Unity 上更改 2D 动画中精灵之间的时间?