yz Vector3到Vector2

时间:2013-02-07 15:42:19

标签: c# vector unity3d

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

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

这样的东西
Vector3 v = Vector3.one;
Vector2 plan = v.yz;

(所有在Unity3d中使用C#) THX

2 个答案:

答案 0 :(得分:4)

C#有一个非常酷的功能叫extension methods。例如,设置一个VectorExtensions类,并将此代码放在:

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

现在您可以在项目的任何地方致电:

Vector2 v2 = v3.YZ ();

答案 1 :(得分:2)

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

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