繁体   English   中英

在Unity中扭曲对象时如何获取对象的旋转?

[英]How to fetch a rotation of a object while twisting it in Unity?

我目前正在Unity for Oculus中实现收音机。 玩家可以旋转旋钮以改变音量。 但是,无论是旋转角度还是旋转角度,在360度旋转时都无法返回唯一值。

下面的代码与eulerangle有相同的问题。

void Start ()
{
    oldRight = Vector3.right;
    angle = 0.0f;
}

void Update ()
{
    Vector3 right = transform.right;
    float tempAngle = Vector3.SignedAngle(oldRight,right,transform.forward);
    if (right.y < oldRight.y)
    {
        angle += tempAngle;
    }
    else
    {
        angle -= tempAngle;
    }
    oldRight = right;
}

transform.rotation

如果您想要XYZ角度(而不是四元数),

transform.rotation.eulerAngles

首先,我们不知道无线电游戏对象和旋钮游戏对象之间的关系是什么,这很重要。

我将举一个示例,以说明如何获得与该关系无关的旋钮旋转。

在下图中,单选框是多维数据集,其转换全部重置为0。

在此处输入图片说明

这是充当旋钮的圆柱体:

在此处输入图片说明

这里的重要部分是我旋转并放置了圆柱体,以使变换的X轴平行于立方体的X轴。

这是旋转圆柱体并报告旋转角度的脚本:

using UnityEngine;

public class RotateKnob : MonoBehaviour {
    public float m_Speed;

    void Update() {
        if (Input.GetKey(KeyCode.RightArrow)) {
            transform.Rotate(Vector3.up, Time.deltaTime * m_Speed, Space.Self);
        }

        if (Input.GetKey(KeyCode.LeftArrow)) {
            transform.Rotate(Vector3.down, Time.deltaTime * m_Speed, Space.Self);
        }

        var angle = Vector3.SignedAngle(transform.right, transform.parent.right, transform.up);
        Debug.Log(angle);
    }
}

注意如何相对于Y轴和Space.Self

angle相对于拍摄到气缸的Y轴(它是围绕我们旋转圆柱体的轴线),从而transform.up作为SignedAngle OFC我们测量之间的角度第三参数,和transform.righttransform.parent.right (作为圆柱体的多维数据集的transform.right )。

使用此代码,您不必担心世界上多维数据集的变换,旋转圆柱体时结果始终是相对于多维数据集的。

请记住, angle报告的范围是[-180,180]而不是[0,360]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM