【发布时间】:2020-11-18 12:03:21
【问题描述】:
我是 Unity3D 脚本的新手,尤其是在涉及 Transform、Quaternions、Vector3 的细节方面。
下面有一个脚本。当我滚动立方体时,它会朝正确的方向翻转。但是,当立方体的本地轴与世界轴不匹配时,立方体的endRotation 会在错误的轴上执行。
谁能帮我解决这个问题:“endRotation” 会在右轴上翻转立方体,无论LOCAL axis <=> WorldAxis 之间的关系如何。
我试图解决它一个星期。因为没有成功。
再往下看代码和视频。
if (Input.GetAxis("Horizontal") > buttonDown)
{
StartCoroutine(FlipTheCube(Vector3.right));
return
}...
。 . .
public IEnumerator FlipTheCube(Vector3 direction)
{
startFliping = false;
float rollStartTime = 0;
float rollAngle = 90;
float halfWidth = transform.localScale.z / 2;
Vector3 pointAround = transform.position + (Vector3.down * halfWidth) + (direction * halfWidth);
Vector3 rollAxis = Vector3.Cross(Vector3.up, direction);
Quaternion rotation = transform.rotation;
Quaternion **endRotation** = rotation * Quaternion.Euler(rollAxis * rollAngle);
Vector3 endPlacement = transform.position + direction;
float oldAngle = 0;
while (rollStartTime < rollDurtnTime)
{
yield return new WaitForEndOfFrame();
rollStartTime += Time.deltaTime;
float newAngle = (rollStartTime / rollDurtnTime) * rollAngle;
float rotateThrough = newAngle - oldAngle;
oldAngle = newAngle;
transform.RotateAround(pointAround, rollAxis, rotateThrough);
}
transform.position = endPlacement;
transform.rotation = **endRotation**;
startFliping = true;
}
【问题讨论】:
标签: c# unity3d quaternions