気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity】共有クラス ( 機能 ) 作成の心構え

スポンサーリンク

f:id:Wojtek:20190627085212j:plain

プロジェクトで他のメンバーから

  • 「この機能が合ったおかげでスムーズに開発が進んだよ!」
  • 「この機能があるおかげで急な仕様変更に対応できたよ!」
  • 「この機能のおかげで結(ry」

などと賞賛を浴びる機能を誰しも1度は作ってみたいと思うと思います!

今回は自分が共有クラス(機能) を作る上で気をつけていることを書いてみました。

下流工程(部品)ほど共有化する

例えば「アイテム」という要素があるとします。

一重にアイテムと表現しても

・アイコン画

・名前

・アイテムの種類

・使用時の効果

   etc...

などの複数の要素の集合体である事が分かります。

これらの要素を一々自前で組み立てるのははっきり言って生産性の無駄遣いです。

そこで役立つのが共有クラスです。

 

アイテムの生成を例に挙げると

・ idを入れたら該当するアイコン画像を生成してくれる共有クラス。

・スキルのidを入れたら該当するスキルを発動してくれる共有クラス

・idを入れたら自動でアイテムを作ってくれる共有クラス

 

これらを作成すればアイテムの生成に時間が取られる心配はありません。

 

また、・ idを入れたら該当するアイコン画像を生成してくれる共有クラス

 

この機能は アイテムをドロップした時の報酬ダイアログ  などにも使えますね。

 

この様に 下流工程 (部品) レベルの機能ほどなるべく共有化していくのが理想的です。

 

めんどくさいロジック程共有化する

 例えば、イベント作成などで 「イベントの開始時間」と「イベントの終了時間」を調べる必要があるとします。

 

時間計算は結構ややこしいです。

・(日本時間か世界時間か) 

・秒単位で比較するのか

 

そこで TimerUtility クラスなどを作成してみましょう。

このクラスは時間管理を一手に引き受けてくれます。

これを使えば今後、時間管理が必要な要素が追加されても柔軟に対応可能になりますね。

 

他の機能と紐付いているものほど共有化する

 

例えば、フレンドの料理を手伝える  機能があるとします。

プレイヤーAが作成中の料理をプレイヤーBが手伝う時、AとB同士の友好度によって手伝った後の報酬が変わるとします。

 

このときプレイヤーBが欲しいのは

・プレイヤーAとの友好度の値

ですね。

 

この場合、プレイヤーBは

・プレイヤーの情報を渡すとそのプレイヤーとの友好度 を返してくれる機能

があれば最高ですよね!

 

このように今後もしどこかで(誰かが)使うかもと想定して作るのがオススメです。

 

・他人が直ぐに使えるように作る

 

これが本題と言っても過言はありません。

プロジェクトでは人の出入りが必ずあります。

他の人が見て

・「瞬時に理解できる」

作りになっていないと意味がありません。

 

 また、共有クラスを使えばそのプロジェクトの設計を簡潔に説明できます。

 

まとめ

 

共有化クラスの醍醐味は

必要なときに必要な処理を瞬時に行ってくれる ところになります。

 

何でもかんでも共有化すればいいと言う訳ではありませんが、なるべく扱いやすく無駄な手間を省いた機能作成を意識していきたいと思います。