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