我试过了,但它没有旋转脊状体
?? characterRotation = viewCamera.transform.rotation; //gets the rotation of the camera
characterRotation.x = 0; //sets the x and z axis to 0
characterRotation.z = 0;
character.MoveRotation(CharacterRotation); //doesn't rotate :(
答案 0 :(得分:2)
您可能想要做的是操作欧拉角。 (我认为这样会导致您将x
和z
设置为0
。)
将对象的角度设置为单位
非常容易transform.eulerAngles = new Vector3(0f,0f,0f);
假设您想要直线,但在“z”上旋转10度。
transform.eulerAngles = new Vector3(0f,0f,10f);
就这么简单。
所以你应该做的是对Vector3
进行操作:
Vector3 camAngles = viewCamera.transform.rotation.eulerAngles;
Debug.Log("cam angles .. " + camAngles.x.ToString("f4"));
Debug.Log("cam angles .. " + camAngles.y.ToString("f4"));
Debug.Log("cam angles .. " + camAngles.z.ToString("f4"));
Vector3 newEulerAngles = camAngles;
newEulerAngles.x = 0;
newEulerAngles.z = 0;
Debug.Log("new angles .. " + newEulerAngles.x.ToString("f4"));
Debug.Log("new angles .. " + newEulerAngles.y.ToString("f4"));
Debug.Log("new angles .. " + newEulerAngles.z.ToString("f4"));
character.transform.eulerAngles = newEulerAngles;
现在应该可以了。
永远记住它只是
在Unity中设置角度。就这么简单。
答案 1 :(得分:0)
我发现了一些事情:
1)Rigidbody.MoveRotation在多个帧上对新旋转执行平滑旋转。如果你改为设置Rigidboy.rotation,它将立即成为新的旋转。使用最好的方法。
2)你似乎把character.MoveRotation(CharacterRotation)与大写字母C.这是故意的吗?因为我看到它的方式,你需要使用小写c来设置character.MoveRotation(characterRotation),以便旋转到你指定的旋转。
3)设置x和z值不起作用,因为Unity将其旋转存储为四元数,它的四个组件中的每一个都在-1和1之间,因此只需将它们中的两个设置为0可能不会给你你想要的结果。为了直接操作在检查器中看到的X,Y和Z旋转值,您必须将Euler Angles设置为Vector3。一种方法是使用Quaternion.Euler(x,y,z)。
除此之外,如果整个物体旋转并不重要,那么旋转变换可能会更容易。但是,如果您希望仅因特定原因改变刚体,请尝试我和其他人提出的建议。希望您很快就能找到解决方案。