1

简单的问题,网上找不到答案。

有没有一种简单的方法可以将 Vector3 的 Y、Z 转换为 Vector2 而无需创建“new Vector2()”

就像是

Vector3 v = Vector3.one;
Vector2 plan = v.yz;

(在 Unity3d 中使用 C# 的所有内容)Thx

4

2 回答 2

6

C# 有一个很酷的特性,叫做扩展方法。例如,设置一个类 VectorExtensions 并将以下代码放入:

public static Vector2 YZ (this Vector3 v) {
    return new Vector2 (v.y, v.z);
}

现在您可以从项目中的任何地方调用:

Vector2 v2 = v3.YZ ();
于 2013-02-07T17:00:03.877 回答
2

不,如果这是你想要的,你不能避免创建一个新的 Vector2,因为它是与 Vector2 不同的对象,并且它们不能以任何方式相互分配。Kay 的扩展方法将为您提供您正在寻找的语法,但如果您只是关心在更新循环或其他东西中分配内存/新对象,那么您就不走运了。

如果您可以完全控制 Vector3 和 Vector2 类,我想您可以让 Vector3 从 Vector2 继承并添加 x 组件;那么您就可以将 Vector3 转换为 Vector2 (将子类视为父类)并且仅使用 y & z 组件。但是,您可能在一个将返回它自己的 Vector3 类的 Unity 库中工作,无论如何,这种继承黑客无论如何都是一个愚蠢的想法。此外,它会迫使您只获得 y&z 组件;如果你想要 z&x 或 x&y ...好吧,你会再次回到 new Vector2() 。

于 2013-02-07T21:47:10.940 回答