我尝试在Unity中为我的相机实现一个简单的控制。我成功地按下w,a,s,d并移动相机。我还想实现一个旋转(稍后用鼠标旋转,但首先使用键e和q旋转)。我已经编写了这个脚本来更新我的相机,但问题是:如果你转过身来,我的按键w,a,s和d的更新过程无法正常工作。 F.E.我想离开,但我会走对。我不知道如何解决这个问题。有人可以给我一个想法吗? 这是我的源代码。希望你能理解我的问题是什么。
float translation_v = -(Input.GetAxis ("Vertical")) * 4.0F * Time.deltaTime;
camera.transform.position += new Vector3 (0, 0, translation_v);
float translation_h = -(Input.GetAxis ("Horizontal")) * 4.0F * Time.deltaTime;
camera.transform.position += new Vector3 (translation_h, 0, 0);
float rotation = -(Input.GetAxis ("Rotate_Player")) * 4.0F * Time.deltaTime * 10F;
camera.transform.Rotate(new Vector3(0F, rotation, 0F));
Vector3 pos = camera.transform.position;
pos.y = terrain.GetComponent<Terrain>().SampleHeight(camera.transform.position)+1;
camera.transform.position = pos;
答案 0 :(得分:0)
首先,Unity拥有第一人称控制器的标准组件,您无需从头开始,请查看资产 - &gt;导入包 - &gt;字符。
假设你是出于教育目的而做的,并且只是想自己实现它:据我所知,你想要朝向相机的方向移动。所以,你需要的是将当前相机旋转所增加的值乘以camera.transform.position
,即代替
camera.transform.position += new Vector3 (0, 0, translation_v);
使用
camera.transform.position += (camera.transform.rotation * new Vector3 (0, 0, translation_v));
和水平相同。您还可以考虑在更新位置之前移动旋转更新。最终代码如下所示:
float rotation = -(Input.GetAxis ("Rotate_Player")) * 4.0F * Time.deltaTime * 10F;
camera.transform.Rotate(new Vector3(0F, rotation, 0F));
float translation_v = -(Input.GetAxis ("Vertical")) * 4.0F * Time.deltaTime;
camera.transform.position += (camera.transform.rotation * new Vector3 (0, 0, translation_v));
float translation_h = -(Input.GetAxis ("Horizontal")) * 4.0F * Time.deltaTime;
camera.transform.position += (camera.transform.rotation * new Vector3 (translation_h, 0, 0));
Vector3 pos = camera.transform.position;
pos.y = terrain.GetComponent<Terrain>().SampleHeight(camera.transform.position)+1;
camera.transform.position = pos;