[英]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.