Unity3dといくつかの神話を払拭

最近、HabréのUnity3dに関する別の記事を読みましたが、興味深いコメントがありました-読み書きの両方、まったく同じではありません。
私はインスピレーションを受け、何が起こっているかについて少しコメントすることにしました。
ここで誰かが自分自身のために新しくて面白いものを描いてくれることを願っています。

いくつかのコメント

記事のこのセクションはコメントのコメントです-引用符で囲まれたテキストは私のものではありません。

「クライアントでのアセットのキャッシュのサポートは非​​常に高額で販売されています(これはブラウザではなく、ディスクで個別に販売されています)。」

3.2にはすべてのユーザー向けのキャッシュがあります(もちろん制限があります)。

「著者は、2つの非常に深刻な問題を慎重に省略しました。
-Unityのゲームには大量のトラフィックが必要です。
「複雑でダイナミックなシーンは使用できません。」
「Unityのゲームには基本的なゲームメカニズムがあります。複数のプレイヤーとの難しい戦いは非常に遅くなります。」
「困難な戦いによって、私は数人のプレーヤーの共同ゲームを意味しました。 Unityでは、これがボトルネックです。 この瞬間は省略できないため、 現代のゲームの主な要件は、高度な社交性です。 プレイヤーは友達とゲームをプレイしたい。 Unityのソーシャルネットワークには実質的にゲームがないことに注意してください。

ソーシャルネットワーク上のほとんどのゲームには非同期操作があります。 つまり Petyaが大学にいたとき、私は来てベッドを壊しました-Petyaは家に帰り、彼の連絡先ページに行き、怒って、庭で私にアベンジャーのチームを送りました。 そしてもちろん、攻撃の時点では、私は直接Petyaと対話していません。 「複数のプレーヤーの共同ゲームがUnityのボトルネック」というフレーズは、特に1つの部屋にいる非常に少数のプレーヤーについて、またはサードパーティのネットワークソリューションについて語る場合に、軽度で無作法に聞こえます。

「そしてその結果:
-交通量の少ない人向けのUnityゲームは悪夢に変わり、
「Unityゲームには基本的なゲームメカニクスがあります-複数のプレイヤーとの難しい戦いは非常に遅くなります。」

一般に、Webプレーヤーの最小アプリケーションの重さは500kbを少し上回り、追加のリソースはAsset Bundles(7zにパッケージ化されています)でダウンロードできます。 ゲームメッセージの交換から生じるトラフィックについて具体的に説明している場合、ネットワーク用に選択したソリューションが再び役割を果たします。

「団結は良いが、書くことを急ぐ前に、2つのマイナスについて考えなさい
1:ZDは万能薬ではないため、慎重に使用する必要があります。 トップのアプリストアを見てください-ほとんどが2Dゲームです。 数億人がプレイするソーシャルゲームを見てください。3Dはありません。 本当に3Dを必要とするゲームメカニックはごく少数です。
2:3Dでジューシーで魅力的なグラフィックスを作成することは、2Dよりもはるかに難しく、専門家だけが行うことができます。 ファンと初心者は、恐怖と恐怖を引き起こす3D画像を作成します...」

Unityで2Dゲームを素晴らしく作成できるという事実には明らかに誤解があります。 これは、アプリ内の多くの開発者が行うことです(ちなみに、ゲームの特定の割合は、トップ100にありました)。

「Unityは組み込みのシェーダーエディターである照明を延期しました。」

小さな間違い。 デフォルトでは、このようなツールは提供されていませんが、高品質の無料ツールであるStrumpy Shader Editorと有料のシェーダーエディターShaderFusionがあります。 3.xでのシェーディングは開発者に向けて一歩進んだため(サーフェスシェーダーが表示されます)、独自のシェーダーを(ビジュアルエディターなしで)書くことは信じられないように思えません。 シェーダーの移植は一般的に優れています(たとえば、 ここから簡単に何か取り出してユニット用にリメイクできます)。

「彼[Unity3d]は閉じています。 つまり ライセンスがあってもソースコードは提供されません。」

非常に真面目な開発者であれば、ソースコードを購入できます(ただし、ソース価格は100kから始まりますが、これらのソースが必要になるという非常に幻想的な可能性もあります)。

また、ライセンス(Unity PROについて話している場合は1,500ドル)については、年に数回、通常は20%の割引があります。 基本バージョン(Unityが0ドル、Unity iPhoneが400ドル)の制限はそれほど大きくはありません。かなりの数のプロジェクトを開発できます。

「Unity for Android / iOSを試した人はいますか? 印象はどうですか?」

印象は素晴らしいです。
最近、たとえば、クアルコムから拡張現実アプリケーション(Kvalkomovsky Unity SDKを使用できます)を作成するためのコンテストが開催され、賞金はそれぞれ1位、2位、3位で125、5万、2万5000ドルでした。
両方のプラットフォーム開発者は、積極的に完成と最適化を進めています。
強力な携帯電話では、Open GL ES 2.0がサポートされています(ピクセルごとの照明、シェーダー)。これは、私の意見では優れています。 Epic Citadelに似た品質のものを試すことができます。

もう少し考え

私が紙に自分の考えを書いている間に、同じ著者からUnityトピックに関する新しい記事が登場しました (著者はよくできました!)。

「3DS Maxでアーティストに真剣なシーンを提供する方が便利です。」 唯一の悪い点は、FBX(maxとunityの中間形式)からUnityが光源をインポートしないことです。 C ++でUnityにプラグインを作成する必要がありました。 そして、これは有料版でのみ利用可能です。 Vobschemはこのエンジンで苦しみました。」

光源が通常ダミーゲームオブジェクトの形式でユニットに転送される場合、なぜC ++でプラグインを記述する必要があったのか教えてください。 光源に正しく名前を付け、ユニットを使用してモデルをインポートするときにこれらの光源を作成する小さなスクリプトを記述する方法について、アーティストに同意することができます。 ユニット内のレベルのアセンブリと3Dパッケージ内のレベルのアセンブリの両方に長所と短所があります-私の意見では、選択は開発者の好みに依存します。

「おそらく、Minecraftの実装をブラックジャックで取り上げることは価値があります。すべての可能性がそこにあるようです。」

それが役立つ場合は、 Unity Minecraft Starter Packageがあります。

ネットワーク

彼らは、Unity3dのネットワークには問題があり、エンジンは多数の接続に適していないと言います。 実際、すべてがよりシンプルです-そして、彼らが言っていることを知っている人は、組み込みのネットワークを念頭に置いています。 組み込みのソリューションの代わりに、ほとんど何でも使用できるためです。

Unity3dを使用するために特別に準備されたAPIを使用したネットワークソリューション:
  1. Smartfox
  2. 光子
  3. バドゥムナ
  4. エレクトロサーバー

あなた自身を台無しにすることができるネットワークソリューション:
  1. オリジナルのRaknet (c ++、Webプレーヤーには適していません)。
  2. リドグレン
  3. レッドワーフ
  4. NetDog (c ++、Webプレーヤーには適していません。また、ある種の非常にクレイジーな値札があります)。

一部のソリューションは無料で、一部はまったく高価ではありません。また、接続数に制限のある無料バージョンも提供します(たとえば、Photonの場合は100-他のユーザーの場合は、正直言って興味がありませんでした)。

当然、任意のテクノロジ(c ++、Java、Erlang、c#など)で独自の何かを記述し、他の既存のネットワークソリューションを固定できます。 TCP \ UDPに基づくものは問題なく動作します。 HTTPプロトコルを使用して作業する場合、最も一般的な選択肢はphpです。ただし、ご存じのように、同じErlangまたは他の何かが実行されます。

私は個人的に簡単なチャットを行いました(これを成果として位置付けていませんが、ステップ3の結果は私を幸せにしました)。
  1. サーバー側のErlangおよびMisultin Web サーバー
  2. Unity3dとクライアント側のWWWクラス。
  3. iPadとiPhone(Unity iPhone Basic)、HTC Desire(Unity Androidトライアル)、PCとMac(Webプレーヤー、Unityの無料版)のさまざまな種類のデバイス-これらはすべて素晴らしく連携し、メッセージを交換しました。

最適化

Unityでの開発中の最適化について話す場合、主なポイントは次のとおりです。
  1. ドローコールが少なければ少ないほど良いです(ただし、これは万能薬ではありません)。 以前は、ジオメトリを1つのメッシュ(CombineChildren)に結合する特別なスクリプトと戦い、骨のあるunningなデザインを収集しました(たとえば、1つのスキンメッシュ、8つのボーン-アニメーションを備えた8つの独立したスプライト、このアプローチは、たとえば、トップiOSゲームで使用されました)ユニットのゾンビビル)。 現在、開発者は、静的バッチ処理、動的バッチ処理、およびUmbra(非表示のサーフェスクリッピングシステム\オクルージョンカリング)によって支援されています。
  2. 必要がなければ、Find \ GetComponentおよび同様のメソッドを使用しないことをお勧めします-可能な限り、スクリプトの実行時にコンポーネントへのリンクを一度保存​​することをお勧めします。
  3. OnGUI()内で不要な計算を実行せず、一度に複数のOnGUI()を使用しないことをおOnGUI()ます。
  4. Fillrateなどのパラメータを監視する必要があります。 半透明の素材を使用したいくつかのフルサイズの飛行機は、iPadのようなものは言うまでもなく、PCのパフォーマンスを著しく低下させる可能性があります。

もちろん、これはほんの数点であり、それによってパフォーマンスを獲得できます。

すくい

旅の始めに初心者デベロッパーを待つ最初の熊手やあいまいな瞬間を少し歩くことができます。
  1. 他のエンジンで多く使用されているように、統一では「ゲームループ」や単一のエントリポイントはありません。 つまり 誰もそのようなことを気にすることはありませんが、原則はデフォルトで動作します:各ゲームオブジェクトは特定のコンポーネントセット(スクリプトを含む)であり、各スクリプトは独自のイベントセットをStart()できます( Start()Update()OnMouseDown()など)。
  2. フォーラムに侵入する前に最初に行うことは、少なくとも、Lerpetsサルに関するサンプルプロジェクトに慣れることです。
  3. 名前でゲームオブジェクトを見つけるには、 GameObject.Find(“Some Object”);メソッドを使用しGameObject.Find(“Some Object”); このオブジェクト(「GO」とも呼ばれる)のコンポーネント(スクリプトを含む)を取得するには、 __.GetComponent<>();形式のコードを使用します__.GetComponent<>();
  4. 多かれ少なかれ高度な開発者も危険にさらされていますが、彼らのレーキはより洗練されています。 たとえば、広く使用されているマテリアルの操作方法( render.material.color = Color.White; color.material.SetColor(“_Color”)など)にトリックが含まれていることを誰もが知っているわけではありませんcolor.material.SetColor(“_Color”)アクセスすると、マテリアルのコピーがメモリ(インスタンス)に作成され、オブジェクトはバッチ処理では動作しません(静的および動的です。スキンバッチ処理は、一般的な考えに反して、3.xではサポートされていません)。 したがって、ここではrenderer.sharedMaterialを使用して作業できます(ただし、マテリアルのプロパティはこのマテリアルを持つすべてのオブジェクトに対して変更されます)、またはMeshクラスとそのような色の変化に応答するシェーダーを使用して頂点の色を変更します。
  5. NPOTテクスチャは不良です(2のべき乗の倍数でない辺を持つテクスチャ)。 適切なサイズは64、128、256などです。 iOSでは、PVRTC圧縮を使用しているため、正方形のテクスチャも使用する必要があります。 非正方形のテクスチャは3Dで洗浄され(GUIには適用されません)、多くの場合、そのようなテクスチャからメモリが続きます。 ここで、テクスチャをユニットプロジェクトにjpg形式で保存することはまったく役に立ちません。 環境は、グラフィック資産を独自の形式に圧縮します。 ローカル開発では、psdが何よりも大好きです。作業がリモートで行われ、アセット\ mercurial \ svnサーバーを介して多くのリソースをやり取りする必要がある場合、pngがさらに好きになります。

Unity3dへの興味深い追加

ユニティへのいくつかの興味深い追加を見てみましょう。

Unity3dテーマに関する最新の興味深い資料の中で、公式Webサイトに投稿されたUnite'2010プレゼンテーションの一部に注目することができます。

短所

短所について話すことができます。 例:
  1. 長い間、ユニットは通常のGUIを固定することを約束しており、それだけです。 しかし、私は明るい未来を信じています。 一方、すべてがそれほど致命的ではありません-UnityGUIが本当にあなたを手に入れたなら、1回の描画呼び出しですべてを描画し、多くのプロセッサ時間を消費しないコミュニティ開発のローションを使用できます(もちろん、ここには多くの仕上げの余地があります)。 ユニットのグラフィカルインターフェイスに有能なWYSIWYGが欲しいです。 時間\欲があれば-もちろん、これは独立して発行することができます UnityでエディターIDEを変更する可能性は本当に大きいです。
  2. Unityで作成した作品を問題なくハッキングできます。 コードを振り返ることができます(ただし、型付けされていないJSとBooが作成者を救うことができます)。 バンドルとWebプレーヤーコンポジションを解凍できます。 シーンとリソースをほぼ元の形式でエディターにロードできます。 もちろん、コードは難読化の助けを借りて保護することができますが、リソースを使用するとより難しくなります(特にWebプレーヤーでは)。 一方、これは問題とは見なされない場合があります-非常に主観的なポイントです。
  3. 現時点では、Webプレーヤー内でのhtmlの表示はサポートされていません(アセットストアで使用されているWebKitはトリプルエディターで認識されたため、変更される可能性があります)。 htmlをレンダリングする必要があり、ユニットでスタンドアロンアプリケーションを使用できる場合は、 ここで確認できます。

おわりに


掘り下げれば、どこでも短所を見つけることができます。 Unityは非常に長い間、問題とトラブルのトピックについて議論することができます。ほとんどの場合、問題を解決する方法があります。 Unityは素晴らしいツールだと思います。2011年にUnity Technologiesがあなたを失望させない場合、すべてのコミュニティは踊り、「お気に入りのツールが開発されているのはどれほど素晴らしいか」を楽しみます。

Unity 3.2の鼻の上で-ユニットロジストに加わりましょう!

Source: https://habr.com/ru/post/J112444/


All Articles