统一使用物理学根据局部旋转移动二维角色
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
如果我要使用翻译作为移动方式,我已经找到了解决方案:
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