【问题标题】:Unity 5 Control via wasd with rotationUnity 5 Control via wasd with rotation
【发布时间】:2016-05-06 20:43:04
【问题描述】:

我尝试在 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;

【问题讨论】:

  • 这是在 SO i.stack.imgur.com/uqJeW.png 上接受答案的方法 试试你的其他两个问题。我向你保证它有效。完成此操作后,请回复我,我会告诉您为什么您的代码无法正常工作。否则,祝你好运。

标签: unity3d


【解决方案1】:

首先,Unity 有第一人称控制器的标准组件,您不必从头开始,查看资产 -> 导入包 -> 角色。

假设您这样做是出于教育目的,并且只想自己实现:据我了解,您希望朝着相机的方向移动。因此,您需要将添加到 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;

【讨论】:

    猜你喜欢
    • 2023-01-30
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多