【问题标题】:Unity2D - How to rotate a 2D object on touch/click/pressUnity2D - 如何在触摸/单击/按下时旋转 2D 对象
【发布时间】:2014-11-03 00:51:53
【问题描述】:

首先,我要让您知道我是 Unity 和整体编码的新手(我知道一些非常基本的 javascript 编码)。我的问题:每次我触摸屏幕时,如何在某个轴(在我的情况下是 z 轴,所以它像你看着方向盘一样旋转)上旋转 2D 对象(预制件)120 度。现在我有这样的:

function TouchOnScreen ()
{
    if (Input.touchCount > 0)
    {
        var touch = Input.touches[0];
        if (touch.position.x < Screen.width/2)
        {
            transform.rotation = Quaternion.Euler(0,0,120);
            Debug.Log("RotateRight");
        }
        else if (touch.position.x > Screen.width/2)
        {
            transform.rotation = Quaternion.Euler(0,0,-120);
            Debug.Log("RotateLeft");
        }
    }
}

每当我按下屏幕的某一侧时,此代码都会旋转对象,但不是我想要的方式。我希望它旋转,以便您看到对象从 A 旋转到 B,但不是(像现在这样)在一帧中从 A 到 B。此外,这段代码让我只能向每个方向旋转一次。

我怎样才能让它每当我按下屏幕的某一侧时,它会增加或减少之前旋转的角度,这样我就可以继续旋转。

注意:请使用javascript,如果您知道更简单的代码,请告诉我!

非常感谢您的帮助,在此先感谢!

【问题讨论】:

  • 你在这里做的是在变换上设置一个旋转......我建议探索的是而不是设置transform.rotation,设置一个“目标”并在你的更新函数中编写逻辑来动画朝向该目标的对象transform.rotation
  • 感谢您的回复!但是你能否给我一个示例脚本,即使我明白你在向我解释什么,我仍然太不熟练,无法将你的解释变成一个脚本:(

标签: android unity3d rotation unityscript unity3d-2dtools


【解决方案1】:

代替

        transform.rotation = Quaternion.Euler(0,0,-120);

你使用:

        var lSpeed = 10.0f; // Set this to a value you like
        transform.rotation = Quaterion.Lerp ( transform.rotation, Quaternion.Euler(0,0,-120), Time.deltaTime*lSpeed);

【讨论】:

  • 非常感谢!这解决了在一帧中从点 A 旋转到 B 的问题,但现在下一个问题是,我只能向左或向右旋转 一次 次。例如,如果我触摸屏幕的左侧,它会向左旋转(按照我想要的方式),但我不能再次向左旋转它。触摸右侧也是如此。
  • 你不能旋转,因为你要旋转到一个固定的角​​度(如你所愿):Quaternion.Euler(0,0,-120) 如果你想旋转超过这个角度,只需使用Quaternion.Euler(0,0,-240),Quaternion.Euler(0,0,-360) ...等.也许现在您可以找到自己的解决方案
  • 我现在可以看到问题@Rudolfwm。感谢您的回复,我将开始寻找一种在每次按下相关侧时添加/减去度数的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多