Unity3D如何在没有刚体的情况下约束旋转



我正在制作一个脚本,它应该像操纵杆一样旋转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轴的改变,或者有另一种方法可以像操纵杆一样旋转物体。

第页。S.我正在使用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);
}

相关内容

最新更新