Unity - 如何从一个角度添加或减去选定的度数?

时间:2014-09-10 17:17:09

标签: unity3d unityscript angle quaternions degrees

我想知道是否有一种方法可以添加(在我的情况下)每次120度 我按下按钮A&#39;并且每次减去120度 < / strong>我从2d精灵(预制件)的 Z轴旋转推动&#39; ButtonB&#39;

这是我目前正在使用的代码,但它只会向左旋转一次,一次向右旋转:

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

提前致谢!

注意:如果可以,请使用unityscript,我对编码很新,而且迄今为止我所知道的仅仅是unityscript。

2 个答案:

答案 0 :(得分:0)

online documentation可以看出函数的签名是

static function Lerp(from: Quaternion, to: Quaternion, t: float): Quaternion; 

这意味着第二个参数是对象的新旋转而不是旋转偏移

你应该使用那种

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

注意第二个参数是transform.rotation + Quaternion.Euler(0,0,120)(当前旋转+向右偏移)

我不是团结引擎的专家(我昨天开始玩免费版本,字面意思)

答案 1 :(得分:0)

试试这个

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

如果这不起作用,请尝试使用Gameobject。我没有检查这个