1

簡単な質問ですが、ウェブ上で答えが見つかりません。

「新しい Vector2()」を作成せずに、Vector3 の Y、Z を 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 の拡張メソッドを使用すると、探している構文が得られますが、Update ループなどでメモリや新しいオブジェクトを割り当てることだけに関心がある場合は、うまくいきません。

Vector3 および Vector2 クラスを完全に制御できる場合は、Vector3 を Vector2 から継承させ、x コンポーネントを追加できると思います。次に、Vector3 を Vector2 にキャストし (子クラスを親クラスとして扱う)、y & z コンポーネントのみを使用できます。ただし、独自の Vector3 クラスを返す Unity ライブラリで作業している可能性が高く、とにかく、その継承ハックはとにかくばかげた考えです。また、y&z コンポーネントのみを取得する必要があります。z&x、または x&y が必要な場合は、新しい Vector2() に戻ることになります。

于 2013-02-07T21:47:10.940 に答える