我正在制作一个脚本,它应该像操纵杆一样旋转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);
}