Unity-2Dゲーム開発の落とし穴

ハブにはUnityに関する初心者向けの記事がたくさんありますが、繰り返したくはありませんが、最初のゲームの開発での経験を共有し、より具体的には、つまずいたことについて話したいと思います。 これにより、開発者の皆さん全員が、予定外の作業や時間の損失から将来自分自身を守る機会が得られます。 製品を改善するために、この資料がUnity開発者に読まれることを願っています。



画像






注意 、猫のスクリーンショットの下に16+



私たちのほとんどは技術者なので、すべてを棚に置いて流行させ、素材をできるだけ簡潔に、簡潔に、水なしで提示するようにします。



挑戦する



私は、新年の、理解と管理が簡単な何かを書きたかった。 ターゲットオーディエンス(私の子供)との議論の結果、ゲームは次のようになることが決定されました。







それはすべて" サタンサンタが彼のバッグを邪魔する鹿を撃っている"という考えにあふれた



モータル・クラウス



そして、それはすべて始まりました...



1.サードパーティのAndroidライブラリ



問題:適切なSDK、JDK、NDKを見つけて、Unityをそれらと連携させるのに2日間を費やしました。 Unityの前の私のマシンには、Android StudioのSDKがすでに存在していましたが、それらからは開始されませんでした。別のものを探して、インストールして、試して、もう一度検索しなければなりませんでした...



改善のための提案: Unityのインストール中に最新バージョンの必要なSDKが自動的にインストールされ、誰かがダウングレードまたはアップグレードする必要がある場合、それをペンで設定してください。



画像



2.ベクターグラフィックス



問題:すぐに使えるUnityはSVGを理解しません。 Paper.jsのようなあらゆる種類の小さなJSフレームワークでさえ、ベクターでスマートに動作しますが、Unityのような象は動作しません。



解決策: SVGを読み取るように見えるベータパッケージインストールしましたが、最終的にはラスターに変換します。 許容できるが、恥ずかしいUnity!



3. 2Dプラットフォーム



画像



問題:スクリーンショットでわかるように、土地があり、その上に雪だるまがあります。 また、これはMeshPolygon Colliderです。 つまり、オブジェクトと相互作用し、エディターで変更できるサーフェスです。 そのため、Unityの現在のバージョンには、これをシミュレートするために使用できる標準ツールはありません。



解決策:

  1. アルファ付きのラスターを描画できます(マイナス-これを編集するのは非常に不便です)
  2. これを行うプラグインを購入できます(マイナス-お金を使う)
  3. あなた自身でプラグインを書くことができます(マイナス-理解するのに長い時間がかかり、書くのに長い時間がかかります)


私は長くて自由な方法を選びました;)誰かがそのようなプラグインを必要とするなら-書いて、共有して、使い方を教えてください、私は気にしません



ちなみに、新しいUnityベータ版のデモを見ましたが、そのようなものがすぐに表示されるようです! 友人、ありがとう!



はい、パネルを追加して、2Dプリミティブ、そこにある円、正方形をすばやく作成します。それ以外の場合は、単に存在しないか、アセットチャネルに移動して探す必要があります。



4.回転と四元数



問題: 2Dゲームでは不要な3D位置決めと回転の非常に複雑なシステム。



解決策: 2Dゲームは座標Z = 0の3Dゲームであるため、それを理解して受け入れる必要があります。しかし、このシステムを2Dモードで単純化することは良いことです;)



私は多くの時間を殺し、脳をほとんど壊しました。別のエンジンでplayerを書いたとき、別のオブジェクトに対して正しい方向に正しい方向にオブジェクトを回転させようとしました。a= 45; はい。現在のバージョンの多くの明らかなメソッドは廃止されました。



5.デバッグ



問題:初心者にとって、デバッグの可能性は、 print()メソッドを使用して変数値をコンソールに出力するという形でのみ利用可能です。 本格的な休憩は、支払う人の多くです。 間違っている場合はここで修正しますが、Visual Studioをデバッグ用に構成することはできませんでした。構成する必要がないことが明らかなビデオが見つかりましたが、それだけで機能するはずです。 彼は、デバッグ版が有料版で利用可能であると結論付けました。



解決策: print()を使用するだけです...そして、複雑なプロジェクトのデバッグがUnityの有料版を取得する決定的な要因になることを理解しています。 会社の悲しい敬意:(



解決しました! Leopotamプロンプトのおかげで、スタジオ用の追加パッケージをインストールすると、 「Attach to Unity debugger」ボタンが表示されました。



6.タップしてクリックし、スワイプして移動します



問題:組み込みのユーザー入力システムの利便性にもかかわらず、通常の単一のテープ、クリック、スワイプの処理の単純さでは十分ではありません。 さまざまな種類のデバイスに対して、シングルクリック/タップの座標を返す1つの方法を使用したいと思います。たとえば、タッチとマウスを使用したデスクトップです。



解決策:クラスレイヤーを記述し、必要なイベントをラップする必要がありました。



おそらく、管理システムに関するコメントをもう1つ残します。 ユニバーサル入力についてUnity開発者に感謝しますが、タッチデバイスについてもユニバーサルコントロールが必要です。 たとえば、上にスライド-ジャンプにバインドし、十字架やボタンを、ジョイスティックのように、その精神で視覚化します。 これは有料パッケージで購入することも、自転車に時間をかけて自分で書くこともできます。



7.座標との混乱



問題:クリック座標をオブジェクトに割り当てて適切な場所で表示することはできません。これは少し明白です。



解決策:まず、ドキュメントを読み、座標をマッピングするためのさまざまな方法を理解して使用する必要があります。



WorldToScreenPoint()

ScreenToViewportPoint()

transform.TransformPoint()

その他...



シーン内の距離はピクセル以外の任意の単位で測定され、さらにオブジェクトにはそれぞれネストシステムがあり、位置は親に対して相対的であるため、これについて説明します。



8.わずかなUIコントロールセット



問題:最も基本的な要素のみがボックスから配信され、それでもいくつかをいじる必要があります。



解決策:少しで満足できます。 たとえば、動的リストをスクロールさせるのに多くの時間を費やしました。 クールなコントロールを購入できます(マイナス-お金を使う)。



9.大きなAPKファイルサイズ



問題:空のプロジェクトをビルドするとき、そのサイズは21.9 MB (23,061,612バイト)



解決策:すべてを保存する必要があります。 私はmp3ファイルを圧縮し、テクスチャを圧縮し、プロジェクトに余分なものを含めないようにしました。 しかし、追加のパッケージが接続されると、サイズは容赦なく増加し、100を目指しました。



Google Playは、開発者に100 MB未満のアプリケーションを投稿するよう求めています。 (22個はすでにゴブアップしています)。 もちろん、リソースを分割して動的にロードするメカニズムはありますが、私たちは新参者であり、私たちの目標は基本を学び、大切な夢を実現し、市場の限界と戦うことではありません。



10.キリル文字



問題: JS / HTML5プラットフォーム用のプロジェクト(テスト用)を組み立てた後、ロシア語で書かれたテキストがまったくないことが判明しました。



解決策:フォントファイルをダウンロードしてアセットにインポートし、インポートしたフォントを各テキストの設定で指定する必要があります。



これはどういうわけか非常に奇妙です。



11.物理性能



問題: 衝突検出に 連続モードを使用する場合、1つのシーンで複数のパーティクルシステムを使用する場合、要するにゲームに壮大さと美しさを与えるすべてを使用する場合、複雑なコライダーがあると、ゲームの速度が著しく低下し始めます。



解決策:プリミティブなサークルコライダーとレクタングルコライダーのみを使用し、 コリジョン検出離散のみにする必要があります。 パーティクルシステムパーティクル数は最小許容値に設定する必要があります。 間違いなく、私の間違いを許さず、パーティクルシステム内で衝突を使用しないようにします。 効果は、もちろん、血がオブジェクトを流れるように美しいですが、非常にリソースを消費します。



画像



当然、これは2Dモバイルゲームにも当てはまります。 しかし、Unityを開発し、パーティクル、衝突、その他すべての複雑で美しいものに新しいクールなシェーダーを使用したいと思います。



おわりに



もちろん、他の落とし穴もありましたが、これらは些細なことです。 次のような予期しない利点がありました。





しかし、これは全く異なる話です...



タスクのタイミングに関しては、項目番号3(プラットフォームをモデリングするためのプラグインの開発)によって非常に抑制されました。 経験豊富な開発者として、20、30、40(20は楽観的、40は悲観的)で、20、30、40(日中はメインの仕事で忙しいので、夜/休み)のように評価しました。 ポイント3がなかった場合、20〜30ヒットしたはずですが、最終的には約2か月を費やしました。 (いいえ、私は毎晩働いていませんでした、つまり、私は約40歳になりました)。



興味がある人は、 Inkscapeプログラムのおかげで、自分でグラフィックスを描画しなければならなかったと言います。 私は、無料で使用できるライセンスを持つ音楽のみを選択しました。



Google Playでの公開に数日費やさなければなりませんでした。



別の2日間は広告の統合に費やされました(おそらく見られないでしょう。実際に試してみたかったのですが、おもちゃは商業的なものとは考えられていませんでした)



はい、多くは改善できたかもしれませんが、正月休み前に友人を楽しませたかったのです。



誤解しないでください、これはPRの投稿ではありません。 何よりも、Unityエンジンを作成する人にこれらの欠点に注意を払ってもらい、もちろんそれらを排除してほしいです(これは理想的です)。 そして、私と同じレーキに乗らないように霊の兄弟たちを助けたいです。



そして、私が何かを間違えた場合、厳密に判断せず、コメントであなたのヒントを共有してください!



All Articles