Unity Asset:マウスクリックと物理演算で小物が簡単に配置できる!Object Placement Tool

今回はマウスクリックと物理演算機能で小物が簡単に配置できるアセット Object Placement Tool の使い方を紹介します。

今回の記事はUnity アセット真夏のアドベントカレンダー 20190 Summer! に参加しています。

Object Placement Toolとは?

Object Placement Tool はオブジェクトをランダムに配置することが簡単にできるツールです。

まずはYoutubeに公開されているデモンストレーション動画を観て予習をしてみます。

Object Placement Tool を使ってできること

YouTubeのプロモーション動画で紹介されている主な機能は次の通りです。

数分でシーンにオブジェクトを配置

配置したいオブジェクトを登録し、マウス右クリックで配置することができます。

オブジェクトのスケールと角度のランダマイズ

配置するオブジェクトのスケールと角度をランダムに設定できます。

物理演算機能を使用して不規則にオブジェクトを積み重ねて配置

これが Object Placement Tool のオススメ機能。手作業では意外と難かしい、オブジェクトが乱雑に散らかっている感じに配置できます。また、配置したオブジェクトをドラッグ&ドロップで再配置できます。

配置したオブジェクトを単一メッシュに結合

配置したオブジェクトを単一メッシュに結合することができます。

配置したオブジェクトのグループ可

親オブジェクトを作成して配置したオブジェクトをグループにまとめることができます。

アセットの中身

アセットをプロジェクトにインポートするとメニューバーにNOT_Lonely が追加されます。メニューをクリックするとこのように3つのサブメニューがあります。

[Project]ウィンドウ > NOT_Lonely > Object Placement Tool フォルダを開いてでファイルの中身をチェック。

Readme ファイルの英文を Google 翻訳して要約してみました。こんな感じの内容です。これである程度の操作方法が理解できます。

メニュー:NOT_Lonely > Object Placement Tool から[Object Placement Tool]ウィンドウを開くことができます。

Object Placement Tool を使用すると、マウス右クリックだけで多くのオブジェクトをワールドに配置できます。
プレハブを[Object Placement Tool]ウィンドウにドラッグアンドドロップ。ランダム回転とスケールを追加して[Enter Edit Mode]を押してから Ctrl + マウス右クリックでシーンへの配置を始めましょう。

また、Ctrl + Shift + R を使用して、選択したオブジェクトをY軸を中心に90度回転させることができます。 モジュラーピースでレベルを構築するときに非常に便利です。

オブジェクト配置ツールのすべての機能の使用方法を明確に理解するには、[Object Placement Tool]ウィンドウの機能名の上にマウスカーソルを置くとツールチップが表示されます。

Demoシーン

[Project]ウィンドウ > Assets > NOT_Lonely > Object Placement Tool > DemoScene フォルダにある ObjectPlacementTool_demoScene を開いて [Scene]ビューで表示しました。沢山の本がばら撒かれています。

[Hierarchy]ウィンドウを確認しましょう。Bookのプレハブがたくさん配置されています。

[Object Placement Tool]ウィンドウの説明

メニュー:NOT_Lonely > Object Placement Tool から[Object Placement Tool]ウィンドウを開いてツール画面を確認しましょう。

Object settings:配置オブジェクトの登録

配置するオブジェクトを登録します。

  • Drag&Drop object here:配置したいオブジェクトをドラッグ&ドロップエリアで登録するエリアです。また、登録したオブジェクト数が表示されます。
  • [Clear the list]ボタン:このボタンをクリックするとオブジェクトの登録がクリアされます。シーンに配置したオブジェクトには影響しません。

Object settings:グループの作成

配置した複数のオブジェクトをグループ化します。

  • [Create new parent]ボタン:クリックするとシーンにグループの親オブジェクトを作成します。
  • [Parent selected]ボタン:[Hierarchy]ウィンドウで複数のオブジェクトを選択してからボタンをクリックすると選択したオブジェクトが親オブジェクトの子階層に移動してグループ化できます。
  • Placement type:オブジェクトの配置する場所をすべて、レイヤー、選択オブジェクトに切り替えることができます。物理演算機能を使用した Physics mode のチェックが入っている場合は選択できません。

Object settings:Combine mesh

配置した複数のオブジェクトを結合します。

  • [Combine selected]ボタン:選択したオブジェクトを結合します。ただし、同じマテリアルを使用している必要があります。
  • Pivot: フィールド:このフィールドに親となるオブジェクトを登録しておきます。

オブジェクトの結合が成功するとこのようなダイアログが表示されます。結合されたオブジェクトは[Project]ウィンドウ > Assets > NOT_Lonely > Object Placement Tool > CombinedMeshes フォルダにメッシュファイルとして保存されています。

この記事執筆時点ではまだ詳しく調べることができていませんが、プレハブがEmptyを親にした階層構造になっているとエラーが発生して一体化ができませんでした。なお、異なるマテリアルのオブジェクトを結合した場合、単一のマテリアルに置き換えられます。

Object settings:Physics mode

オブジェクトの配置を物理演算機能を使用して行います。

  • Physics mode チェックボタン:物理演算機能を使用してオブジェクトを配置する場合にチェックを入れます。
  • [Spawn objects]ボタン:Edit モードを終了すると Physics mode で配置したオブジェクトはシーンからいったん消去されるので、このボタンをクリックすることで実体化されます。
  • Precise simulation チェックボタン:小さいオブジェクトが配置場所をすり抜けてしまう場合にチェックを入れます。ツールチップには「衝突処理のパフォーマンスに問題を起こす可能性がある」と書いてあります。

Physics modeのチェックを入れている場合、エディットモード有効中は自動的に[Game]ビューに切り替わり、このような操作画面になります。Ctrl キーを押すと水色の矢印と十字アイコンオブジェクト配置UIが表示されます。

Object settings:Brush mode

一度のクリックで複数のオブジェクトを配置できるブラシモード。

  • Brush size:オブジェクトを配置するブラシのサイズ。
  • Brush intensity:一度のクリックで配置されるオブジェクトの数。
  • Brush depth:ブラシの判定深度。

Rotation settings

配置するオブジェクトの角度を設定します。

  • Initial Totation:配置するオブジェクトの基準となる角度の設定をします。
  • Randam Rotation:配置オブジェクトの角度をランダムにする場合にチェックを入れます。
  • Randam Angles:ランダムな角度の範囲を指定します。
  • Align to Surface チェックボックス:配置面の法線に沿ってオブジェクトを配置する場合にチェックを入れます。
  • Follow Path チェックボックス:既存の配置オブジェクトの角度を参照してオブジェクトを配置します。ツールチップには「フェンスを並べる場合などに良い」と書いてあります。(Follow Path と Align to Surface は排他選択です)

Follow Path チェックボックスをオンにするとオブジェクトの配置方向と次のオブジェクトの配置方向のガイドが表示され、オブジェクトの配置方向をマウスで制御できます。

Scale settings

配置するオブジェクトのスケールを設定します。

  • Scale:配置するオブジェクトのスケールを設定します。
  • Randam Scale チェックボックス:配置オブジェクトのスケールをランダムにする場合にチェックを入れます。
  • Scale Min:ランダムスケール値の最小値を設定します。
  • Scale Max:ランダムスケール値の最大値を設定します。

Y(up) Offset


配置するオブジェクトがデカールやポスターなど板ポリゴンのメッシュの場合、配置先オブジェクトのメッシュと鑑賞しないようにオフセットすることができます。

Ruler


[Ruler]ボタン:このボタンをクリックしてRulerを有効にすると、[Scene]ビューで Ctrl + マウス右クリックで2点間の距離を測ることができます。

Ruler はエディットモードがオフの状態で使用します。使用すると[Scene]ビューでこのように表示されます。

[Enter Edit Mode]ボタン


エディットモードの切り替えを行います。エディットモード有効中に Ctrl + マウス右クリックでオブジェクトを配置できます。

Object Placement Toolを実践してみる

それでは Object Placement Tool を使ってサンプルシーンを作成してみます。

まずは以前の記事で使用した室内のオブジェクトを用意してシーンを作成しました。

壁や床のテクスチャはUnityのアセットストアの無料テクスチャYughues Free Architectural Materials を使用しています。

ここから Object Placement Tool を使ってオブジェクトを配置していきます。配置するオブジェクトは Asset Store から Free cans opened pack を使用しました。

アセットには16個の缶のプレハブが用意されています。

こんな感じで床にばら撒いてみました。

カメラ操作は以前の記事 Standard AssetsのFirstPersonCharacterをマウスドラッグの視点操作に改造 で紹介した方法を使用。

さらに、部屋を移動できるだけではちょっと物足りないので、ばら撒いた缶を吹き飛ばせるようにしてみました。具体的な手順は別記事で紹介予定です。

WebGL

作成したシーンをWebGLでビルドしてみました。 画像クリックでファイルがダウンロード、再生されます。(ダウンロードサイズ:約18MB)

  • 視点移動:前 W /左 A /後 S /右 D キー(またはカーソルキー)
  • 視点操作:マウス左ドラッグ
  • カーソル位置の缶を吹き飛ばす:Space キー

まとめ

Unity の Terrain ツールで用意されている Paint Trees や Paint Details と同じように、マウスクリックやブラシでオブジェクトを配置できて作業がはかどります。さらに物理演算機能で自然な形に積み重ねられるのがいちばんの特徴ですね。