C# 如何计算transform.RotateAround的角度,以便最终结果的y==0
所以我需要解决以下难题: 有一个旋转的三维立方体(34,90,23)(或其他一些随机值)。我想绕局部y轴旋转,直到transform.position.y==0。在编辑器中,我可以在y轴上拖动rotate,直到在变换中看到0作为值为止,但是如何使用代码实现这一点呢?(不能仅设置y=0,因为在绕局部y轴旋转时,所有值都会更改) 我正在考虑使用transform.RotateAround(transform.position,transform.up,angle),但我不知道如何正确计算角度,以便在RotateAround()之后,transform.rotation.y==0 我不想对拖动本身进行编码,只想对结果进行编码。旋转应该是瞬间的C# 如何计算transform.RotateAround的角度,以便最终结果的y==0,c#,unity3d,C#,Unity3d,所以我需要解决以下难题: 有一个旋转的三维立方体(34,90,23)(或其他一些随机值)。我想绕局部y轴旋转,直到transform.position.y==0。在编辑器中,我可以在y轴上拖动rotate,直到在变换中看到0作为值为止,但是如何使用代码实现这一点呢?(不能仅设置y=0,因为在绕局部y轴旋转时,所有值都会更改) 我正在考虑使用transform.RotateAround(transform.position,transform.up,angle),但我不知道如何正确计算角度,以便在
有人能为此编写工作代码吗?transform.eulerAngles=newvector3(transform.eulerAngles.x,0.0f,transform.eulerAngles.z) 如果这不起作用,请尝试使用带有小写a的eulerAngles
这将直接将您的y值设置为0,并使其他值与以前相同。我猜您要查找的是一个“动画”,它将影响
transform.localEulerAngles.y
值。为了实现这一点,我建议使用协同程序(您可以找到Unity教程)
它看起来是这样的:
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;
}
private IEnumerator RotateAroundY(浮点旋转时间)
{
浮动定时器=0.0f;
Vector3 StartOcalueLangles=transform.localEulerAngles;
矢量3三角形三角形=新矢量3(0.0f,数学三角形(0.0f,0.0f),0.0f);
while(计时器<旋转时间)
{
timer+=Time.deltaTime;
transform.localEulerAngles=startOcalueLangles+deltalOcalueLangles*(计时器/旋转时间);
返回新的WaitForEndOfFrame();
}
transform.localEulerAngles=startOcalueLangles+deltalOcalueLangles;
}
您可以使用startcroutine(RotateAroundY(4.0f))调用它代码>
如果您要进入Unity,我强烈建议您熟悉协同程序:)
编辑:
很抱歉没有注意到您不需要动画:如果您只是想围绕本地transform.up
向量旋转,您可以更改transform.localeuleranges.y
值
可以这样做transform.localEulerAngles.y=newvector3(transform.localEulerAngles.x,0.0f,transform.localEulerAngles.z)代码>
希望这有帮助,这不会产生相同的结果。绕轴旋转与设置y值不同。当围绕transform.up旋转(且x和z不是0)时,所有x、y和z都会更改。因此,在给定的示例中:如果执行transform.RotateAround(transform.position,transform.up,-90),则不会得到(34,0,23)Ok,因此您正在查找编辑器中的旋转,而不是更改y值?为什么不能使用while循环;使用问题中的代码保持围绕y轴旋转,如果transform.eulerAngles.y=0,则停止围绕y轴旋转与更改y值不同。这仅在x和z为0时有效。我可以做一个循环,但是速度太慢了,因为我是在更新函数中做的。不,transform.rotation.y不能代表角度。解决方案比这更复杂。您可能需要亲自尝试一下,看看原因。此网站不提供代码编写服务。像“有人可以为此编写工作代码吗?”这样的请求是不需要的。什么是“y轴”?坐标系的y轴还是立方体的局部y轴?托马斯:我没有其他方法来解释我的问题。不知道我怎么能不问代码就问我的问题。。。如果可以用其他方法解释,我完全可以。Y轴是指transform.upNo,我不想要动画。正如我所说:“只是为了说明,我不想对拖动本身进行编码,只想对结果进行编码。旋转应该是即时的。”很抱歉没有注意到“只是为了说明,我不想对拖动本身进行编码,只想对结果进行编码。旋转应该是即时的。”句子:我只接受了“我想绕局部y轴旋转,直到transform.position.y==0。“考虑到这句话,我希望你们同意,感觉你们需要一个动画。。。无论如何,围绕本地transform.up
旋转等于更改transform.localeuleranges.y
值,所以我想您只需编写transform.localeuleranges=new Vector3(transform.localeuleranges.x,0.0f,transform.localeuleranges.z)代码>