旋转对象,与相机旋转相同

时间:2016-06-01 13:19:05

标签: c# unity3d

我试过了,但它没有旋转脊状体

?? 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 :(

2 个答案:

答案 0 :(得分:2)

您可能想要做的是操作欧拉角。 (我认为这样会导致您将xz设置为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;

现在应该可以了。

永远记住它只是

.eulerAngles

在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)。

除此之外,如果整个物体旋转并不重要,那么旋转变换可能会更容易。但是,如果您希望仅因特定原因改变刚体,请尝试我和其他人提出的建议。希望您很快就能找到解决方案。