簡體   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