使用物理统一基于局部旋转移动二维字符

时间:2017-05-02 16:45:47

标签: c# unity3d rotation 2d rigid-bodies

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

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

然而,我无法找到一个解决方案来解决如何使用基于物理的运动。

我的chracters控制器能够围绕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;
}

一切正常。然而,当我旋转相机,因此旋转精灵。当刚体运动在全球范围内旋转时,刚体运动变得全部倾斜。空间,而不是&#34;本地&#34;。

我尝试将facecamera脚本放在子对象上只是为了让刚体离开,但这没有任何效果。

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

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

1 个答案:

答案 0 :(得分:0)

解决方案是使用:

IsType<T>()

代替:

Rigidbody.AddRelativeForce(Vector2.down * speed);

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

文档在这里:

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