繁体   English   中英

与 3d 相比,为什么 AddForce 需要不同的 2d 语法?

[英]Why does AddForce require different syntax for 2d compared to 3d?

我刚刚将我的一个对象从 3d 更改为 2d,在这样做时,我注意到我的 AddForce 运动脚本坏了。 在修复了一些语法后,我注意到它要求我输入 Vector2 作为 Vector 2,而不是简单的 (1f, 0) 例如。 为什么这与 3d 对象的 AddForce 不同,在那里我可以用 (1f, 0, 0) 添加力。 我可以通过制作一个新的 Vector2 来解决这个问题,但它相对来说比较笨重。

在现实世界中,并非所有事情都有充分的理由。 这是一个这样的例子。 Rigidbody 有两个可用的 AddForce 接口( https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html ),而 Rigidbody2D 只有一个( https://docs.unity3d.com/ScriptReference/Rigidbody2D.AddForce.html )。

Unity 团队是否也可以为 Rididbody2D 添加第二个接口? 当然,容易。 但他们没有。 只是因为。 这就是为什么。

然而,没有什么能阻止你自己做。 C# 支持扩展方法,即您可以向现有类添加新方法。 在你的情况下,创建一个这样的脚本:

using UnityEngine;

public static class MyExtensionClass {

    public static void AddForce(this Rigidbody2D rb2D, float x, float y, ForceMode mode = ForceMode.Force) {
        rb2D.AddForce(new Vector2(x, y), mode);
    }
}

只需将它放在您的资产文件夹中的某个位置,现在您可以简单地从项目的任何其他文件中使用 AddForce(x,y),有效地向 Rigidbody2D 类添加一个新方法。 就是这样。

Rigidbody 需要 Vector2,因为只想在 2 维中移动 2 维刚体是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM