首页 > 解决方案 > 玩家旋转和摄像机旋转

问题描述

我希望玩家看向方向,相机在看。

摄像机跟随玩家(第三人称游戏风格)。

我试过了

transform.localRotation = new Quaternion(transform.localRotation.x,
  cameraMain.transform.localRotation.y, 
  transform.localRotation.z, 
  transform.localRotation.w);

但它不起作用。

有时玩家会开始向另一个方向旋转。

标签: c#unity3d

解决方案


以下代码将使对象(在参数中指定)朝向主摄像头所看的方向:

public void lookInDirectionOfCamera(Transform object) {
   RayCastHit hit;
   if (Physics.raycast(cameraMain.transform.position, cameraMain.transform.forward, out hit)) {
      object.forward = hit.point - object.position;
   }else { //if the raycast didnt hit anything, make the object face 100 units in front of the camera
      Vector3 point = Camera.main.transform.position + Camera.main.transform.forward * 100;
      object.forward = point - object.position;
   }
}

这将使玩家面对镜头前方的点。如果您只是希望它们在 y 轴上具有相同的旋转,请不要使用四元数!相反,你可以用欧拉角来做:

transform.eulerAngles = new Vector3(transform.eulerAngles.x,
cameraMain.transform.eulerAngles.y,
transform.eulerAngles.y);

不使用 transform.localRotation 的原因是因为那是一个四元数。四元数中的 y 分量与欧拉角中的 y 轴(您习惯于看到的)不同,四元数非常令人困惑,因此您几乎不应该在其中设置单独的值。如果要编辑它们,请仅使用内置方法。


推荐阅读