【Unity】オブジェクトの複数選択を使いこなして効率アップ!

Unityで開発をしていて、Hierarchyウィンドウに表示されているGameObjectをひとつひとつ選択してコンポーネントの値を設定していく……。
こんな間違いを犯してませんか?
同じコンポーネントを持つGameObjectは複数選択で同時に値を編集することができるんです。
知っている人は「今更そのネタ……?」となるかもですが、知らなかったのならかなり便利に使える技なのでぜひ使ってみてくださいな。
効率、めっちゃ良くなりますよ。
環境
macOS 10.14 Mojave
Unity2018.3.14f1
Unity Hub 2.1.0
複数選択のやり方
例えば、TransformのPositionを設定するとき、一律でYの値を設定したい場合を考えます。以下の場合だったら、青色のPlaneの上にCubeを配置するケース。

CubeのScaleが1なので、PositionのYには0.5を入れていきたいです。
この時、ひとつひとつGameObjectを選択して、TransformのPositionからYに0.5を入力していくのは手間ですよね。
GameObjectの数が上の図のように少なければこれでも良いでしょう。
しかし10個、いや20個のGameObjectで同じ設定を入れる場合は……? あぁ、考えたくもありません!

そこで、Hierarchyウィンドウで設定したい対象のGameObjectを複数選択して、Transformの値を入力してみましょう。値がハイフン”-“になっている項目は、選択したオブジェクトで違う値が含まれていることを表しています。

すると、選択したGameObjectではTransformの値が一気に設定されているんです。Planeの上にCubeを配置するという目的は簡単に達成されました。

たとえ20個あっても一気に設定できます。便利。

複数選択は、連続したGameObjectを選択するなら[Shift]キーを押しながらクリック、選択するGameObjectが飛び飛びなら[Ctrl]キーを押しながらクリックします。ここはOSの操作と同じなので分かりやすいです。
![[Shift]キーで連続したオブジェクトを選択](https://ekulabo.com/wp-content/uploads/2019/08/multi_select_03.jpg)
![[Ctrl]キーで一部のオブジェクトを選択](https://ekulabo.com/wp-content/uploads/2019/08/multi_select_04.jpg)
Transformだけではなく、マテリアルだって一括で設定できちゃいます。

複数選択で一度に編集できるのは同じコンポーネント
上の例だと、Cubeオブジェクトを複数選択していたので同じコンポーネントを持っていました。
「じゃあ違うコンポーネントを持っているオブジェクトだとどうなるの?」
と思ったあなた、いい質問ですねぇ。
結論から言うと、複数選択を行なって一度に編集できるのは同じコンポーネントだけ。つまり、共通して持っているコンポーネントがあればそれが編集対象となりますが、それ以外は編集できないように表示されません。
たとえば、UIのImageオブジェクトとButtonオブジェクトを複数選択する場合を考えます。
メニューバーから作成したImageオブジェクトには以下のコンポーネントがアタッチされています。
- RectTransform
- CanvasRenderer
- Image
同じくメニューバーから作成したButtonオブジェクトには以下のコンポーネントがアタッチされています。
- RectTransform
- CanvasRenderer
- Image
- Button
共通して持っているコンポーネントは上3つ、Buttonコンポーネントは共通ではないので表示されないことになります。
実際にImageオブジェクトとButtonオブジェクトを複数選択してみると以下の画像のように表示されます。

共通でないコンポーネントが含まれている場合は、画像の下の方にあるように以下のメッセージが表示されます。
Components that are only on some of the selected objects cannot be multi-edited.
選択したオブジェクトのどれかにしか含まれていないコンポーネントは一括編集できないよ(意訳)
と言われてコンポーネントが表示されません。
UIのImageオブジェクトと、3DのCubeオブジェクトを複数選択してみるとInspectorの表示はこうなります。

共通するコンポーネントがないため、表示されていませんね。かろうじて名前や表示/非表示のチェックは一括で変えられます。
複数選択が威力を発揮する場面
これが威力を発揮するのは、インポートしたアセットを複数選択して、インポート設定を一括で設定するときでしょうか。
この複数選択はHierarchyウィンドウだけではなく、Projectウィンドウでも使えます。
特に画像アセットでは、圧縮設定などを一律で設定したいので、フォルダ内のアセットについて一気に設定できるのは
とても便利です。

画像アセットのインポート設定って、リリース前の調整で嫌という程触るんですよね。容量とパフォーマンスとの戦いには時間がかかるので、こうした手間を減らせるという意味でもアセットを複数選択して設定を一気に変えると便利です。
まとめ
今回お伝えしたのはオブジェクトやアセットの複数選択について。複数選択を使えば、選択したオブジェクトが共通で持っている設定を一度に変えられます。
Unityでは画面から設定を行うグラフィカルな操作も多いため、ひとつひとつの操作の時間を減らすことでゲーム開発全体にかかる時間を減らすことに繋がります。
言葉だけだと実感しずらいかもしれないので、ぜひ手を動かして、実際にやってみてくださいな。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】UIが反応しないときはこの3つをチェック! 2019.08.10
-
次の記事
【Unity】インポート設定を変えずにアセットを更新する 2019.08.18
コメントを書く