如何在 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.1f
和30.0f
(我认为30.0f 会是30º,但我不确定);
尝试更改其他轴上的旋转 y
和 z
而不是 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 中旋转精灵?的主要内容,如果未能解决你的问题,请参考以下文章