【问题标题】:Moving a 2d character based on local rotation using physics in unity统一使用物理基于局部旋转移动 2d 角色
【发布时间】:2017-05-02 16:45:46
【问题描述】:

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

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;
}

一切正常。但是,当我旋转了相机,因此旋转了精灵。刚体运动在“全局”空间而不是“局部”空间中旋转时变得完全倾斜。

我曾尝试将 facecamera 脚本放在子对象上,只是为了不理会刚体,但这没有效果。

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

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

【问题讨论】:

  • 当然,尽管我已经尝试修复了几个小时,但在我询问后 10 分钟内我设法解决了这个问题。解决方案是改变:rigid.AddForce(Vector2.down * speed);到刚体。添加相对Force(Vector2.down * speed); docs.unity3d.com/ScriptReference/…希望这对面临同样问题的人有所帮助。
  • 请将您的解决方案添加为答案并将其标记为已接受,以便其他人知道此问题已解决
  • 完成,我会尽快将其标记为正确。谢谢你让我知道。堆栈溢出有点新。

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


【解决方案1】:

解决方案是使用:

Rigidbody.AddRelativeForce(Vector2.down * speed);

代替:

Rigidbody.AddForce(Vector2.down * speed);

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

文档在这里:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多