新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。12/24の記事です。株式会社サムザップでUnityエンジニアをしている大庭です。グラフィックデザイナー、Flashデベロッパーを経て、現在はUnityエンジニアでスマホゲームを作っています。Unity歴は6年くらいです。今までコマンドバトル、ピンボール、麻雀などを作ってきました。これから紹介していく内容は、開発初期後回しにされがちな、でも初期にやっておいた方が良いことばかりです。僕はUnityエンジニアとしてプロジェクトを進める上で以下の事を重要視しています。動くものをいち早く作ってメンバーに共有ワークフロー構築、開発手法を整える事が最優先いきなり正解は出ないので、不都合が出てきたら修正していくスタイル修正見直しの数を繰り返して精度を上げていくこの思想も取り入れた形でリストアップしました。新規ゲームプロジェクトがスタートし、あなたはUnityエンジニアとして参画する事になったと想定します。ゲーム仕様はまだ真っ白な状態で、計画しているモック開発の要件も決まっていません。「あ〜仕様も決まってないし、やる事がなくて暇だな〜」って、んな事ぁない!!仕様が無くてもやる事はいくらでもあります。今回のタイトルを見て「42Tips!?多すぎじゃない・・・!?」と思ったあなた!ぜひ読んでみてください。今まで新規開発に携わる事の多かった僕が思いつく「仕様がなくてもUnityエンジニアが開発序盤にやれる事」をツラツラ紹介していきます。本記事は開発初期に暇を持て余しているUnityエンジニアができる42のTips前編の後編です。Resolutionの値を決めるという話です。デザイナーの元データにも影響があるので、UIを作り出す前に決めておく必要があります。解像度毎のパターンを作り、対象となる実機何点かで実際に確認して決めれば良いと思います。その際、スマホと解像度比率の大きく違うタブレット端末での見え方も注意すると良いでしょう。20.共通UIパーツを共通のPrefabにするUI画面にはよく各画面同じようなパーツが出てきます。戻るボタンダイアログに表示するOKやキャンセルボタンゲージ各種アイコンなどなど。これらをそれぞれの画面で新規で作成するのは無駄なので、デザインがまだ仮の状態の時から共通のPrefabとして使い、デザインが仕上がってきたら、該当するPrefabの中身を差し替えていくのが良いでしょう。開発が進む中で無理やり使い続けている感が出てくる場合は、ケースバイケースで作り直した方が良いです。21.ダイアログなどのシーンをまたいで使用するものはDontDestroy領域へ以下のようなシーン間、または各シーンで共通して使用したいもの、シーンをまたいで削除されたくないものはDontDestroyOnLoad(gameObject);として、シーン遷移時にDestroyされないようにします。ダイアログUIタップ・スワイプエフェクトローディング、ダウンロード表示Tips表示UIのブロッキング(画面タップを無効化するオブジェクト)22.ダイアログシステム作成ダイアログは大抵どのようなゲームでも必要になるので、先に取り掛かります。暫定要件ダイアログ以外の部分をタップしても、その後ろのコンテンツは反応しないダイアログ以外の部分をタップすると、ダイアログを閉じる事ができる細かい事だけど、ダイアログを開く・閉じる時にはSEが鳴るようにするダイアログは重なって表示できるようにするOKボタン、キャンセルボタン押した時のコールバック設定OK、キャンセルの表示ON/OFFなどなど。この中でも「ダイアログは重なって表示できるようにする」は、デザイン次第ではやりたくないという意見も出る場合がありますが、その時に考えて一旦動くものを作って体感を確認しながら進めるのが僕は好きです。経験的にもその方がプロジェクトはより早く前に進みます。Debug.Log("cancel")});上記のような感じでダイアログを呼べるように一旦実装しています。23.UI用のCanvas共通化処理UI用のCanvas、CanvasScalerの設定はプロジェクトで共通設定になる事が多いです。それを毎度毎度設定するのは非効率のため、以下のような自動化できるコンポーネントを作っておきます。}このような共通コンポーネントを作っておくと、修正が入った時に対応しやすいです。24.UI階層構造のルールを決めるデザインによって大きく変わる可能性がありますが、大抵以下のような構成になるので一旦これで作ってしまいます。通常ダイアログレイヤー・・・通常ダイアログオーバーレイレイヤー・・・ローディング、Tipsなどシステムダイアログレイヤー・・・システム系ダイアログ最前面レイヤー・・・・タッエフェクトなど25.タップ・スワイプエフェクトを実装しておくスマホゲームを作る場合、必ずと言っていいほどタップした時やスワイプした時のエフェクトが必要になります。優先度的には後でもよい判断をされるかもしれませんが、先に実装しておく事をおすすめします。タップ・スワイプエフェクトは最前面に表示されなくてはいけません。後から実装すると、UIの階層関係を構築する際に見落としてしまって、手戻りをしてしまう可能性があります。僕は表示階層に関わるものに関してはできるだけ優先的に実装しておく事にしています。先に実装し、prefab化しておけば、クリエーターにブラッシュアップをお願いするのも楽です。Environmentsは、Unity2018.3からNestedPrefabが導入され追加された設定です。Environmentです。uGUI関連のPrefabをプレファブモードで編集する際、uGUIはCanvas配下に存在しないと表示が崩れます。EnvironmentにCanvasやカメラを配置したシーンを設定しておくとプレファブモード時にそのシーンを使用してくれます。NestedPrefabを使用する際は必須設定なので序盤に忘れないように設定しておきたいです。Environmentに設定するシーン内のCanvasは23.UI用のCanvas共通化処理で紹介した設定を適用すると良いでしょう。27.iPhoneXセーフエリア対応セーフエリア対応はデザインの序盤に思想を決めて動けていないと、後々大きな手戻りが発生する可能性があります。デザイナーとしっかり相談して、意志を統一していきたいところです。iPhoneX系の実機で日々確認するのも大事です。28.UIカラー設定コンポーネントを作っておくデザインが進んでいくとキーとなるカラーが決まってきます。uGUIのパーツを予め白色で作成しておき、プログラムで色を重ねて作成する場合があります。その際、指定カラーをUnity上でひとつひとつセットしていくのはとても無駄な作業です。楽をするための以下のようなコンポーネントを用意しておきます。}このようにプルダウンでカラーを指定し反映する事ができるので効率的ですし、非エンジニアでも対応可能になります。開発序盤中盤はカラーの変更はザラにありますが、その反映もソースコードを変更するだけで対応できるのもメリットです。作業効率化29.よく使う拡張メソッドを用意しておくTransformRectTransformListStringDictionaryComponentGameObjectこれらよく使うクラスのよく使う処理は、拡張メソッドとして用意しておくと開発効率が上がります。拡張メソッドを使用しているのかどうかがパッと見、分かりづらくなるためネームスペースにExtensionsをつけておく事をオススメします。Hoge.Extensionsの部分です。30.よく使いそうなシェーダを用意しておく乗算、加算(カラー加算、加算ブレンドの両方)、ブラーシェーダ等を用意しておくと良いと思います。※ググれば出てくるので詳細は割愛します31.テクスチャインポータの作成ゲームを作っていると様々な画像アセットが必要になります。ターゲットプラットフォームごとに指定する圧縮テクスチャの種類やクオリティが変わってきます。これらを毎度設定するのはオペミスに繋がりますし、ミスをしてても気づきづらいため、AssetPostprocessorを使って所定のディレクトリに格納したら、自動でインポータが実行されるようにしておくと良いです。32.アセットバンドル名を自動で設定されるようにするアセットバンドルを利用する場合は、参照用のアセットバンドル名を必ず付ける必要があります。以下は2.Unityプロジェクトディレクトリ構成を決めるで解説したUnityプロジェクトのディレクトリ構成です。fooAssetBundlesディレクトリ配下に格納すると、AssetPostprocessorで自動でアセットバンドル名が付与されるようにしています。chara/hoge/testというアセットバンドル名に自動で追加されます。以下のアセットはどのようなプロダクトの開発でも必要な汎用性の高いアセットなので、初期から導入しています(執筆時点)。(無料)TexturePackerの採用理由Unity純正のSpriteAtlasではなく、TexturePackerを採用している理由ですが、以下に挙げている通り、単純にTexturePackerの方がとても優秀だからという点で採用しています。アトラスに固める前の画像をUnity内部に格納する必要がないTexturePackerアプリ上でスライス設定できる(とても操作しやすい。UnityのSpriteEditorは見づら...ごにょごにょ...)指定したテクスチャサイズから溢れた時に気づきやすい(自動でテクスチャ数が増えないため)フォルダ分けするとフォルダをSprite名にしてくれるので、命名ミスを減らせる有料といえど安価34.ランタイム中のデバッグ機能としてSRDebuggerの導入33.最低限使用するであろうアセット導入でも紹介しましたが、SRDebuggerは入れておいた方が良いです。SRDebuggerとはUnityEditor、実機上ともにランタイム中のデバッグをしやすくしてくれる外部アセットです。AssetStoreから購入可能です。詳細は割愛しますが、これひとつでデバッグツールをまかなえるくらい汎用的な神ツールです。自分のPCで実機ビルドできる環境を作っておくのは、プロダクトのプロファイルをする上で大事です。Xcodeを利用したプロファイルは強力なのでiOSの実機ビルドはできるようにしておくと良いです。36.アプリ、アセットバンドルのビルド環境整備アプリ、アセットバンドルのビルド環境は必ず必要になります。ジェンキンスを使ったビルドジョブを作り、終了したらSlackに通知するようにしています。アプリはビルドされたら、AppCenter(旧:HockeyApp)などのサービスから開発メンバーに配信できるようにすると良いです。ビルドされたアプリはビルド番号をアプリ名に入れておくと便利です。イメージこのような感じです。37.サウンドアセット作成環境構築Unity標準サウンド以外を使用する事が最初から決まっている場合は、サウンドアセット作成のワークフロー構築に早めに取り組みたいです。今回はCRIサウンドを使用すると仮定します。※Unity標準サウンドを使用する場合は不要CRIサウンドを利用する場合は、オーディオファイルをCRI専用ファイルに変換しなければなりません。変換処理にAtomCraftを利用する場合、そのワークフローを事前に検証、環境構築しておくと良いです。大人数でAtomCraftを使用する場合、どのファイルをgitignoreに入れなければならないかなど、時間に比較的余裕のある開発序盤に潰しておくと時間を効率に使えます。38.動画アセット作成環境構築37.サウンドアセット作成環境構築の動画版となりますが、動画はエンコードの仕方で大きくクオリティが変わってくるので、検証できる環境を用意しておくと良いと思います。39.環境切り替えツールの導入ゲームを開発する上で最低限以下の2種類は切り替えます。開発環境リリース環境その他にもステージング環境、サンドボックス課金環境などプロジェクトによっては様々な環境が必要になります。環境を切り替えた時には以下の情報を切り替えています。#endif※環境毎のAPI接続先切り替えの例です。これらの情報を切り替えられるようなツールを作っておくと後々楽です。40.クラッシュレポートの導入クラッシュレポートは開発序盤から入れるようにしています。開発序盤はバグも多いためクラッシュの理由をいち早く特定するための材料としてクラッシュレポートは助かります。僕が今関わっているプロジェクトではSmartBeatを導入し、レポートの概要はSlackに通知するようにして常にウォッチしている状態です。41.UIパーツのレギュレーションまとめページを作っておくUIパーツの命名ルールはエンジニアリングを知っている人が決めるべきだと僕は思っています。いわゆるTA的な人です。僕はTA的な動き方をする事もあるので、皆が見れる場所にUIパーツのレギュレーションページを作っておきます。今のプロジェクトの場合はConfluenceを利用しています。最初にひな形を作っておくとメンバーは迷わないので、事前にワークフローを構築しておく事は大事です。以上の情報を1ページにまとめ、変更が入る度に更新しています。開発序盤は更新頻度が多いので、ある程度落ち着いてからでも問題は無いと思います。繰り返しになりますが、大事なのはワークフローを事前に作っておく事です。最後はとても細かい内容ですが、SerializeFieldアトリビュートをつけるだけで、以下のようなWarningが出てきます。nullUnityを使う身としてはSerializeFieldアトリビュートは必ず使うのでこのWarningは不要です。初期値を入れれば解決しますが僕は一括で消し去りたいので、以下Assetsフォルダ直下にcsc.rspファイルを作成します。-nowarn:0649すると、該当のWarningは消えます。最後に前編、後編と長々と書いてきましたがいかがだったでしょうか。汎用性の高いものだけを紹介しましたが、関わるプロダクトの種類によってはまだまだやる事はあると思います。仕様がなくてもUnityエンジニアは忙しいということですね(笑)。今回紹介した大小含めた42のTipsが皆様の開発のお役に立てれば幸いです。明日は@chrno001さんの記事です。11:00開発初期に暇を持て余しているUnityエンジニアができる42のTips後編Tweet読者になるボタンを押して貰えるととてもがんばれます。大庭俊介(bao_bao)渋谷のUnityエンジニア。スマホゲーム作って生活しています。設計、組み込み、演出一通りを自分1人で完結して作るのが得意です。よろしければTwitterフォローお願いします。(@ohbashunsuke)株式会社サムザップでUnityエンジニアとしてスマホゲーム作っています。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。