如何检查Unity3d中对象的旋转?

时间:2014-12-18 06:59:39

标签: unity3d rotation

我是一名统一的学习者。我有旋转对象的问题。我想沿z轴旋转大约40度的物体。如果物体旋转达到40度,我想要发生一些事情。这是我的代码。

foreach(Touch touch in Input.touches) {
    if(touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled) {
        var target = Quaternion.Euler (0, 0,-40);
        transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);
        if (transform.rotation.eulerAngles.z == -40) {
            toggle = true;
            speech = "blah blah blah";
            snake = man;
        } 
    }   
}

if(transform.rotation.eulerAngles.z == -40)代码行不起作用。所以我不知道旋转度是否达到了40度。如何检查旋转度是否达到40度?

1 个答案:

答案 0 :(得分:0)

我不明白你的代码意图。

EulerAngles未设置为负值仅为正值(Vector3)
-if(eulerAngles.z == -40)不起作用尝试更改值-40 - > 320
如果你想要方案
ontouch - >对象旋转 - >事件
试试这段代码。

float rotTime = 1f; // rotation duration
Vector3 rotValue = new Vector3(0, 0, -40f); // rotation value

void Update () {
    foreach (Touch touch in Input.touches)
        if (touch.phase == TouchPhase.Began) OnTouchEvent();
}

void OnTouchEvent()
{
    StopCoroutine("rotationCoroutine"); 
    StartCoroutine("rotationCoroutine");
}
IEnumerator rotationCoroutine()
{
    float startTime = Time.time;

    Vector3 startRot = transform.eulerAngles;
    Vector3 endRot = startRot;
    endRot += rotValue;

    while (Time.time - startTime <= rotTime)
    {
        transform.eulerAngles = Vector3.Slerp(startRot, endRot,(Time.time - startTime) / rotTime);
        yield return null; // wait 1 frame
    }
    //rotation end
    MyAction();
}

void MyAction()
{
    Debug.Log("rotation end");
    //toggle = true;
    //speech = "blah blah";
    //snake = man;
}

祝你好运:D