统一使用物理学根据局部旋转移动二维角色

Moving a 2d character based on local rotation using physics in unity

如果我要使用翻译作为移动方式,我已经找到了解决方案:

http://answers.unity3d.com/questions/1035804/how-do-you-make-an-omnidirectional-2d-character-co.html

但是我无法找到解决方案,因为我的运动是基于物理学的。

我的角色控制器可以让相机绕 z 轴旋转:

public Transform target;
private float cameraRot = 3;

 if (Input.GetKey("q"))
    {
        target.transform.Rotate(0, 0, cameraRot);
    }

然后我有一个关于我正在创建的世界中所有精灵的脚本,它旋转以始终面对相机:

    public Transform target;

void Start () {
    target = GameObject.Find("MainCamera").GetComponent<Transform>();
}

void Update () {

    if (target != null)

        this.transform.rotation = Camera.main.transform.rotation;
}

一切正常。但是,当我旋转相机时,因此也旋转了精灵。刚体运动在 "global" space 而不是 "local".

中旋转时变得全部倾斜

我曾尝试将 facecamera 脚本放在子对象上,只留下刚体,但这没有任何效果。

我希望我说得足够清楚,希望有人能提供帮助。

非常感谢您抽出宝贵时间,如果我找到解决方案,我会将答案标记为正确,如果我在回答之前自行修复此问题,我将更新我的修复方法。

解决方案是使用:

Rigidbody.AddRelativeForce(Vector2.down * speed);

代替:

Rigidbody.AddForce(Vector2.down * speed);

在局部轴而不是全局轴中添加力。

文档在这里:

https://docs.unity3d.com/ScriptReference/Rigidbody.AddRelativeForce.html