2016-05-02 18 views
1

3Dゲーム用に作成されたユニティスクリプトが2次元ゲームで役立つことがたくさんあります。実際には、それらのゲームにホイールを追加することを再考したくありません。ですから、私の質問は、2Dゲームで、現在の3Dゲームスクリプト(Vector3sとPhysics.Raycast()、Physics.Gravityなど)を使用することができます(すべてのGameObjectには、Collider2DやRigidbody2Dのような2Dコンポーネントがあります。 Physics2D .Raycast()、Physics2D .Gravity、etc.)への呼び出しを使用する他のスクリプトですか?私は、だと思っていますが、それは愚かな非効率なので、私は2Dクラスで再実装するかもしれません。しかし最初に尋ねると思った。2Dユニティゲームの3Dクラス

ありがとうございました!

+1

問題はありません。楽しい。それは "愚かな非効率"ではない。 99%のゲームは、パフォーマンスの限界に近づいているだけです。実際には、ほとんどの場合、単に "2D"クラスに変更するのは簡単です(そして楽しみです!)。 – Fattie

+0

@Joe Blow。答えてくれてありがとう! 2dクラスのすべてを変更することは、私が実際に避けようとしていることです。私はすでに3Dゲームのために書かれたたくさんのスクリプトを持っています。すべてのVector3をVector2などに変更するために、それらのすべてをコピーする時間をかけたくありません。さらに、これらの3Dスクリプトはまだ開発中ですので、2Dコピーを作成するには、すべての変更を2回行う必要があります。あなたは2Dのすべての3Dスクリプトを修正することを推奨していますか、それとも実際に2Dのゲームで動作させるためにこれを行う必要がありますか? – Rabadash8820

答えて

3

Joeのコメントと同じように、できます。ユニティ2D関数はvector2Dを受け取り、Vector3Dを渡すとz軸は破棄されるので問題はありません。

私の提案は、それがで動作するようにすべてが容易になりますよう3D2Dため、同じスクリプトを使用することです。たとえば、3Dスクリプトで大きなゲームロジックを変更する場合は、2Dスクリプトで同じものを実行する必要があります。また、2Dまたは3Dコードのトラブルシューティングを行う場合には、大きな苦痛があります。これはC# Preprocessor Directivesが使用される場所です。

#if USE2D 
//Put your 2D specific API code 
#else 
//Put your 3D specific API code 
#endif 

2Dコードをテストするためには、単にあなたのコードの先頭に#define USE2Dを置きます。これは、3Dおよび2Dコードのトラブルシューティングを行う場合に役立ちます。それは2Dコードをテストするために3Dコードとコメント解除をテストするために、あなただけのコメント#define USE2D

+0

うわー、@プログラマー、素晴らしいアイデア!私は条件付きコンパイルを使うことは決して考えなかったでしょう。 Unityがこの目的のために#defineを組み込んでいるかどうか知っていますか? – Rabadash8820

+2

@ Rabadash8820 Unityには多くのプリプロセッサがありますが、2D/3D用のものはありません。これを自分自身に追加して、2D/3D用にビルドしたいときに有効にすることができます。注意して、 '#if USE2D'の代わりに' [Conditional( "USE2D")] 'を使用することもできます。これはよりクリーンです。詳細については、https://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspxを参照してください。プリプロセッサに組み込まれたUnityの詳細については、http://docs.unity3d.com/Manual/PlatformDependentCompilation.htmlを参照してください。エディタで定義することさえできます。ちょうどリンクをご覧ください。 – Programmer

+1

素晴らしいリンクです。この優雅なソリューションに感謝します。私は正しいものとしてurの答えをマークしました! – Rabadash8820

関連する問題