アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

【Unity】3Dマップを簡単に作れるTileWorldCreatorの使い方【Asset】

こんにちは!ジェイです。今回は3Dマップを作る時に便利なアセットTileWorldCreatorの紹介をします。以下のようにパラメーターを設定するだけで簡単に様々な種類のマップを生成することが出来ます。

Image from Gyazo

記事内広告

インポート

まず最初にこちらをインポートします。

するとこんなエラーが発生するでしょう。

エラーの原因と修正方法

エラーの内容を読んでみると次の事が原因だというのがわかります。Odin Inspectorは、.NET Standard 2.0のAPIサーフェスに対してソースコードをコンパイルすることができません。API Compatibility Level は Player の設定で変更することができます。

それではさっそくエラーを修正していきます。

Edit>Project SettingsのPlayerタブを開きApi Compatibility Levelを.NET 4.xに変更しましょう。これだけでエラーは修正されます。

はじめに

空のGameObjectを作成し、そこにTileWorldCreatorコンポーネントを追加します。

新しい設定ファイル(.assetファイル)を作成したり、既存の設定ファイルをパッケージから読み込むことができます。
読み込みをクリックすると、さまざまな設定を試すことができます。これらのファイルは、(フォルダ名を入力)にあります。


または、ボタン create config をクリックしてください。作成した設定はすべて、この設定ファイルに保存されます。
これは、ランタイムにTileWorldCreatorを異なるマップテーマで使用する際にも便利です。

新しい設定ファイルをロードまたは作成した後、「Generate new」ボタンをクリックしてください。
左クリックで新しいタイルを追加し、右クリックで既存のタイルを削除することができます。
現在のマップに問題がなければ、「ビルド」ボタンをクリックします。

※注意 新しい設定ファイルを作成した場合は、マップを作成する前に、まずタイルを設定する必要があることに注意してください

これでマップの完成です(オプション) マップを統合する場合は、構築後に「統合」ボタンをクリックします。

使い方は以上です。次からは設定できる項目を見ていきます。

設定

TileWorldCreatorの設定タブを開くと、設定可能なすべてのオプションが表示されます。

  • Name – これは、シーン内でタイルがインスタンス化されるWorldコンテナの名前です。
  • Invert – マップを反転させます(地面=ブロックまたはブロック=地面)。
  • Build Ground tiles – 地面のタイルを有効にします。
  • マップの向き – グローバルマップの向きを変更します。
  • Number of layers – レイヤーの数を設定します。
  • Layer inset – 追加レイヤーごとにレイヤーのインセットを設定します。0 = 次のレイヤーは下のレイヤーと同じになります。
  • オーバーラップするタイルを構築
  • グリッド幅 – 実際のマップ幅のサイズ
  • グリッドの高さ – 実際のマップの高さのサイズ
  • スケール – グローバルマップのスケール
  • Scale tiles – タイルがスケールに応じてスケーリングされる場合、trueを設定します。

アルゴリズム

TileWorldCreatorでは、異なるアルゴリズムを選択することができます。ドロップダウンリストの利用可能なアルゴリズムのいずれかを選択します。
選択された各アルゴリズムには、各フォールドアウトの下で利用可能な異なる設定オプションがあります。希望する場合は、独自のアルゴリズムを実装するのは簡単です。

Cellular

セルラーアルゴリズムは、基本的にTileWorldCreatorバージョン1の古いアルゴリズムです。このアルゴリズムは島に最適です。

  • 死亡制限
  • 出生限界
  • ステップ数 – アルゴリズムを実行してマップを滑らかにする頻度を設定します。
  • Chance to start alive – 初期グリッドの密集度を設定します。

BSP Dungeon

BSP Dungeon アルゴリズムは Binary Space Partitioning アルゴリズムに基づいてダン ジョンのようなマップを生成します。このアルゴリズムでは、シンプルダンジョンアルゴリズムとは異なり、マップ空間全体が均等に使われるようになっています。

  • Min BSP Leaf width – BSPツリーの最小のリーフ幅のサイズです。
  • Min BSP Leaf height – BSPツリーの最小のリーフハイトサイズ
  • Corridor Width – 各部屋をつなぐ廊下の幅を設定します。

Simple Dungeon

シンプルなダンジョンアルゴリズムはBSPダンジョンよりも多くのオプションを持っていますが、生成される部屋はBSPダンジョンのように均等ではありません。円の部屋を作る – 四角い部屋ではなく、円の形の部屋を生成します。

  • 最小円部屋半径 – 円部屋の最小半径
  • 部屋の最大半径 – 円の部屋の最大半径です。
  • Room count – 生成された部屋の概算数です。
  • Allow room intersection – 部屋が互いに交差することを許可します。

ここで注意してほしいのは、部屋の交差を許可するがfalseの場合です。部屋が交差すると削除されてしまうので、部屋数は少なくなります。

  • Min room size width – 部屋の幅の最小値
  • Min room size height – 部屋の高さの最小値です。
  • Max room size width – 部屋の幅の最大値です。
  • Max room size height – 部屋の高さの最大値です。
  • Min corridor width – 廊下の幅の最小値です。

Maze algorithm

その名の通り、このアルゴリズムは迷路を生成します。設定のinvertオプションがfalseになっていることを確認してください。

  • Linear – 直線的な迷路を構築します。
  • Use random start pos – trueの場合、アルゴリズムは開始位置をランダムに選択します。
  • Start pos. – use random start posがfalseに設定されている場合に使用される開始位置です。

マージ設定

Cluster size – クラスターの正方形サイズをタイルで定義します。

  • Multi material mesh – trueの場合、TileWorldCreatorは、各共有材料のメッシュの代わりに、マルチマテリアルメッシュを生成します。
  • Add mesh collider – 結果的にマージされたメッシュにメッシュコライダーを追加します。

TileWorldCreatorは、構築したマップをクラスターに統合することができます。インスタンス化されたタイルは、より大きなクラスタグループにグループ化されます。このクラスタグループは、ドローコールを減らすために単一のメッシュにマージすることができます。

注意点

マップのマージ時にエラーメッセージが表示される可能性があります。これは、マージされたクラスターの結果として得られるメッシュが、Unityの頂点数制限を超えているためです。このような場合、自動オプションを有効にすることをお勧めします。この方法では、TileWorldCreatorがタイルプレハブに応じてクラスターのサイズを自動的に設定します。

プリセット

TileWorldCreatorは、5枚のタイルがあれば完全なマップを生成することができます。
各プリセットには、エッジタイル、コーナー、反転コーナー、ブロック、フロアタイルを割り当てることができます。

  • 5枚のタイルをすべてドラッグ&ドロップエリアにドラッグしてください。すべてのタイルがアルファベット順に並べられていることを確認して、最初のタイルがエッジタイル、2番目がコーナータイルというようにしてください。
  • TileWorldCreatorは、もちろん5枚以下のタイルでも動作します。地面やブロックのタイルが必要ない場合は、そのままにしておきましょう。
  • マップを構築する際にタイルの回転が間違っている場合は、各タイルにY回転オフセットを追加することができます。

タイルタイプ

  • エッジタイル
  • コーナータイル
  • 反転コーナータイル
  • ブロックタイル
  • 地面のタイル – 地面のタイルは、"地面 “として最初の層でのみ使用されます。

タイルセット

より多様性を持たせたい場合は、追加のタイルセットを追加することができます。TileWorldCreatorは、それらのタイルセットからランダムにインスタンスを作成します。例えば、以下のようになります。1つのタイルセットでプリセットを作成します。生成されたマップは、ある時点で非常に反復的に見えます。そこで、追加のタイルセットを追加して、他のタイルセットとは異なるプレハブタイルを追加することで、繰り返しのパターンを解消することができます。プリセットとタイルセットは、好きなだけ追加できます。

マップ編集

マップ編集用のフォルダには、マップを修正するために必要なものがすべて揃っています。

レイヤー

マップをランダムに生成する際、設定タブで追加するレイヤー数を指定できます。TileWorldCreatorは、ベースマップをランダムに生成し、各レイヤーに同じマップを追加しますが、その際にはインセットを使用します。インセットの値は設定で編集できます。各レイヤーに1つのプリセットを割り当てることができます。

マスクレイヤー

新しいマスクレイヤーを追加するには、新しいマスクを適用したいレイヤーを選択し、「マスクの追加」をクリックします。マスクレイヤーの詳細については、以下を参照してください。

シーンビューでマップを描く

Unityのシーンカメラをオーソグラフィックに、ビューをトップに切り替えることをお勧めします。シーンエディタの軸表示の下にあるメニューを右クリックしてください。また、ペイントする前に、Unityの移動ツールに入っていることを確認してください(W)

これで、グリッドに直接ペイントできるようになりました。

  • ZまたはYを押すと、アンドゥ/リドゥができます。Hを押すと、マップの表示/非表示を切り替えることができます。
  • マップ編集タブで自動ビルドを選択すると、チャンスを直接見ることができます。
  • 必要であれば、マップ編集タブでレイヤーを選択することで、レイヤーを追加してペイントすることができます。

ランタイムエディタ

TileWorldCreatorには、使いやすいランタイムエディタが付属しています。それはマップを生成するために割り当てられたTileWorlCreatorのプレハブからすべての設定を使用します。

米注意 TileWorldCreatorオブジェクトがシーンからアサインされていることと、カメラがアサインされていることを確認してください。

ランタイムエディタを設定

正しい設定のTileWorlCreatorプレハブがすでにシーンにあることを確認してから、TileWorlCreatorフォルダにあるTileWorldCreatorRTEプレハブをシーンにドラッグ&ドロップするだけです。
TileWorlCreatorプレハブやシーンカメラなど、プレハブに適切な参照が割り当てられていることを確認してください。
再生ボタンを押すと、準備完了です。

マップクランチー

  • Creator – TileWorldCreatorのリファレンスです。
  • Radius – クランチの半径です。
  • Crunch rate – どのくらいの速さでクランチを行うかを指定します。
  • Subtract – タイルを減算または追加します。
  • Height dependent – trueの場合、オブジェクトの高さと同じ高さのタイルのみを削除します。

TileWorldCreatorには、オブジェクトの位置に応じてタイルを減算したり、追加したりできるマップクランチースクリプトが付属しています。マップは自動的に更新されます。スクリプトは以下の場所にあります。

TileWorldCreator/Script

  1. スクリプトをシーン内の任意のオブジェクトに割り当てます。
  2. そのオブジェクトにTileWorldCreatorの参照を割り当てて再生します。

マップクランチャースクリプトを使った簡単なデモシーンも必見です。

Save and Load map

TileWorldCreatorスクリプトのインスペクタにあるオプションメニューボタンをクリックすると、既存のマップを保存したりロードしたりすることができます。Load or Save mapを選択します。.xmlファイルが保存されます。Random Seedの値を使ってマップを生成する場合。基本的にはシード値を保存するだけです。ランダムシードの詳細については、Random.seedを参照してください。

まとめ

以上でTileWorldCreatorのエラー修正から説明までは終わりです。3Dマップをタイルベースで作ろうと思ったら、かなりの労力と時間の削減ができるので、ぜひ使ってみてください。

アイコンは星宮あきさんからお借りしました。

+3