所以我需要解决以下难题:
有一个带旋转的3D立方体(34,90,23)(或其他一些随机值)。我想围绕局部y轴旋转,直到transform.position.y == 0.在编辑器中我可以在y轴上拖动旋转,直到我在变换中看到0作为值,但我该怎么做用代码? (您不能只设置y = 0,因为当您围绕局部y轴旋转时所有值都会改变)
我正在考虑使用transform.RotateAround(transform.position,transform.up,angle),但我不知道如何正确计算角度,以便在RotateAround()之后transform.rotation.y == 0。
只是为了指定,我不想编写拖动本身,只是结果。轮换应该是即时的。
任何人都可以为此编写工作代码吗?
答案 0 :(得分:0)
transform.eulerAngles = new Vector 3(transform.eulerAngles.x,0.0f,transform.eulerAngles.z);
如果这不起作用,请尝试使用小写字母A的eulerAngles。
这将直接将您的y值设置为0,并将其他值设置为之前的值。
答案 1 :(得分:0)
我猜你正在寻找的是一个"动画"这将影响transform.localEulerAngles.y
值。要实现这一点,我建议使用协程(你可以找到Unity教程here)。
看起来像这样:
private IEnumerator RotateAroundY(float rotationTime)
{
float timer = 0.0f;
Vector3 startLocalEulerAngles = transform.localEulerAngles;
Vector3 deltaLocalEulerAngles = new Vector3(0.0f, Mathf.DeltaAngle(startLocalEulerAngles.y, 0.0f), 0.0f);
while (timer < rotationTime)
{
timer += Time.deltaTime;
transform.localEulerAngles = startLocalEulerAngles + deltaLocalEulerAngles * (timer / rotationTime);
yield return new WaitForEndOfFrame();
}
transform.localEulerAngles = startLocalEulerAngles + deltaLocalEulerAngles;
}
您可以使用StartCoroutine(RotateAroundY(4.0f));
调用它。
如果您要进入Unity,我强烈建议您熟悉协同程序:)
编辑:
很抱歉没有注意到您不需要动画:如果您只想围绕本地transform.up
向量进行旋转,则可以更改transform.localEulerAngles.y
值。
你可以这样做transform.localEulerAngles.y = new Vector3(transform.localEulerAngles.x, 0.0f, transform.localEulerAngles.z);
希望这有帮助,