繁体   English   中英

Unity3D如何在没有刚体的情况下限制旋转?

[英]Unity3D How to constrain rotation without rigidbody?

我正在制作一个脚本,该脚本应像操纵杆一样旋转GameObject,这意味着仅X和Z轴必须更改。 所以我正在使用sin和cos函数来计算旋转角度。 但是由于某些原因,Y轴也会发生变化。

public float alpha;

void Update () {
        alpha += Time.deltaTime;

        var x = R * Mathf.Cos(alpha);
        var z = R * Mathf.Sin(alpha);
        transform.Rotate(new Vector3(x, 0, z) * Time.deltaTime);
    }

因此,问题是如何阻止Y轴发生变化,或者还有另一种方法可以像操纵杆一样旋转对象。

PS我正在使用Unity 2017.4.13f1

在更新功能中,您可以编写:

public float alpha;
public Vector3 rotation;
void Start(){
    rotation = transform.rotation.eulerAngles;
}

void Update () {
    alpha += Time.deltaTime;
    var x = Mathf.Cos(alpha);
    var z = Mathf.Sin(alpha);
    rotation.x = x;
    rotation.z = z;
    transform.rotation = Quaternion.Euler(rotation*time.deltaTime);
}

我不明白您乘以Sin和Cos的R变量。R在哪里定义?

我决定将每帧的Y轴设置为0。 也许不是最优雅的解决方案,但它可以按照我的需要工作。

Vector3 rotationVector;

void Start()
{
    rotationVector = new Vector3();
}

private float alpha;
public float multiplier;

void Update () 
{
    alpha += Time.deltaTime;

    rotationVector.x = Mathf.Cos(alpha);
    rotationVector.z = Mathf.Sin(alpha);

    transform.Rotate(multiplier * rotationVector * Time.deltaTime);
    transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, transform.eulerAngles.z);
}

暂无
暂无

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

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