简单的问题,在网络上找不到答案。
是否有一种简单的方法可以将Vector3的Y,Z转换为Vector2而无需创建“new Vector2()”
像
这样的东西Vector3 v = Vector3.one;
Vector2 plan = v.yz;
(所有在Unity3d中使用C#) THX
答案 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()。