概要 - エディター拡張入門

概要

Unity エディターの完成度はいつも8割程度

私が Unity エディターについて説明するとき、いつも「Unity のエディターはいつも8割程度の完成度でリリースされています」と言っています。これは Unity のクオリティが8割というわけではありません。そのようにしているのは「これ以上の完成度を持った機能はユーザーの手で実装して欲しい」という狙いがあるからです。もし、FPS に特化した Unity であれば RPG が作りにくくなるかもしれません。3D ゲームに特化すれば2D ゲームが作りにくくなるかもしれません。このように、これ以上の完成度を持つとユーザーが好きなゲームを作成できなくなる可能性があります。そこで Unity は、Unity でできる(想定している)ことの10割のうち、2割をユーザーが自由にカスタマイズできるようにしました。

アイデアはアセットストアにあふれている

ユーザーはこの2割を使ってカスタマイズしていくことになります。プロジェクトに合ったカスタマイズをすることで、Unity の性能を10割、もしかすると10割以上引き出すことができるかもしれません。

どのようにして2割を補っていくかですが、そのアイデアはアセットストアにあふれています。パラメーターを編集している時のインスペクターが使いにくいですか?では、インスペクターを拡張しているアセットを見てみましょう。ノベルゲームの作り方&管理の方法がわかりませんか?では、フレームワークを提供しているアセットを見てみましょう。

このように、みなさんが「不便だな、もうちょっとここ良くならないかな?」と思っていることは、アセットストアで公開済みかもしれません。または、特殊なプロジェクト事情を解決するヒントになるかもしれません。皆さん通る道は同じということですね。

アセットストアでアセットを購入してもいいし、そのアイデアを元に社内向けに自作してもいいかもしれません。残りの2割をこのようにして補うことで、ユーザーやプロジェクトごとに最適化された Unity エディターが完成します。

プロジェクトのワークフロー

エディター拡張の恩恵が大きくなるのは、仕事やサークルでゲームを開発するときのような多人数でのゲーム開発です。

通常プロジェクトを進めていくには「ワークフロー」が存在しなければいけません。ワークフローとは、物事の流れのように一連の作業の流れを定義したものです。これにより個々の作業プロセスが決まり、他人から見てもそのプロセスの流れや繋ぎがわかりやすくなってフローの受け渡しが円滑になります。特にこのワークフローは複数人で作業している時に大きく発揮します。

ケアレスミスをできるだけ避けたい

Unity は「インスペクター」「ヒエラルキー」「シーン」「プロジェクト」と言った、GUI ベースの上で操作を行いゲームを作成します。

初期状態の Unity エディター

図1: 初期状態の Unity エディター

例えば、「コンポーネントをゲームオブジェクトにアタッチする」といった作業をするとしましょう。アタッチする方法は、インスペクターの Add Component ボタンや上部の Component メニューから行います。もし「コンポーネントをアタッチするのを忘れていた」ためにエラーが発生している場合、アタッチする方法/対象が単純な構造であればすぐに原因は特定できるでしょうが、複雑になればなるほど原因の特定は困難になっていきます。

Unity のインスペクターでは、自由に「ゲームオブジェクトにコンポーネントを追加」「コンポーネントの値をマウスドラッグで変更」ができます。しかもゲーム再生中にも変更できるという、とても素晴らしい機能です。ですが、ワークフローの上にある決められた値を設定したりするような「決まった作業」に限っては、この自由な機能が邪魔になるかもしれません。

特に:

  • 決められた値なのに間違えた値を設定してしまう
  • 触ってはいけない値を変更してしまう
  • あやまってオブジェクトを削除してしまう

というようなケアレスミスは避けて通れません。特に GUI ベースの Unity では多く発生してしまいます。これは筆者の考えなのですが、ケアレスミスをしてしまう大半の部分は単純な作業の部分が多く、(実現可能かはともかく)ケアレスミスをなくすための解決は容易なものと考えています。

  • 決められた値なのに間違えた値を設定してしまう → エクセル・仕様書などからデータを抽出して入力する
  • インスペクターで触ってはいけない値を変更してしまう → その値に触れないようにする
  • 誤ってオブジェクトを削除してしまう → オブジェクトを削除できないようにする。または確認ダイアログを出すようにする

というように(極端でわかりやすい)一例を出しましたが、これらはどれもエディター拡張で実現可能です。

ゲーム開発 > エディター拡張開発

経験のある方はわかると思いますが、エディター拡張の開発はとても楽しい作業となることが多いです。「Cube に Rigidbody をアタッチしたら重力で下に落ちていく」のようなランタイム側で経験する、実装したらすぐに結果を見ることができる楽しさをエディター拡張でも味わうことができます。

筆者は「ゲームを作りたい!」と Unity を起動したはいいものの「こんな感じに拡張したらゲーム開発が捗るのでは?」と考えてしまい、ゲーム開発そっちのけでエディター拡張の楽しさに没頭してしまうことがよくあります。

あくまで最終目的はゲームを作り上げることなので気をつけましょう!

プロジェクトに合わせたエディター拡張は強い

アセットストアにあるエディター拡張系のアセットを使うと、すぐに便利な Unity エディターになります。ですが「(チーム・会社の都合上で)ここをもうちょっとこうしたい!」となることが多くなるのも事実です。アセットストアのものは汎用的なものになりがちで、少し特殊な環境に置かれているプロジェクトになると、途端に使いづらくなってしまいます。

その解決としてソースに手を加えたい場合、もちろんエディター拡張の知識が必要になります。知識さえあれば、他人のソースでも自ずと修正すべき箇所が見えてくるはずです。

また、アセットを自作することによって、プロジェクトに合わせた独特で癖のあるアセットが出来上がるかもしれません。他のプロジェクトでは役に立たないかもしれませんが、当プロジェクトでは無くてはならない機能になるかもしれません。

本書について DLL をデコンパイル