【Unity】Tile World Creatorまとめ
- TIle World Creatorについて
- 概要
- タイルの作り方
- ブループリント機能
- 生成用コード
- バグ(Version 3.1.2p1 - December 09, 2021)
- 見落としがちなミス
- 参考
TIle World Creatorについて
概要
- TileWorldCreatorコンポーネントをオブジェクトにつける
- ブループリントで生成ルールを設定してアセット指定してビルド
- 生成位置はコンポーネントをつけた位置を基準に生成
- コンポーネントにつけたアセット名が親オブジェクトになる
- 同シーン内で複数マップを生成したい場合はアセット名を変えること
タイルの作り方
- 図説したほうがわかりやすいので図説
- 4タイルと6タイルルールがあるが、ここでは4タイルルールを採用
ブループリント機能
ジェネレータ
DSP Dungeon
- ローグライク風のダンジョンを生成
- CollidorWidthは通路の幅
Cellular Automata
- 島や大陸風のマップを生成
- 細胞を増殖して消滅するまでの仕組みを利用して実装するやつ
L-System
- 樹枝状に枝分かれする道を生成
Maze
- そのまんま迷路を作る
Random Noise
- 適当にノイズをちりばめる
- Expand、Smoothで形を整えると大陸っぽい外観のマップができる
Paint
- ツクール風に手動でタイルを塗るようにしてマップを描く
モディファイア
Add
- 指定レイヤーにこのレイヤーを加算
Expand
- タイル境界線を外側に1タイルぶん拡張
Shrink
- タイル境界線を内側に1タイルぶん縮小
Invert
- マップ配置を反転
- 通常は外側へ開くが内側に閉じる作りにするのに使う
- 屋内マップを作るのによく使う
Offset
- 配置を指定方向へずらす
Overlap
- 指定した2つのレイヤーの重複部を結果に出力
PlayerPosition
- 図を3x3に分割して位置を指定すると、そこに1タイルぶん生成される
Select
- ボーダー、エッジなど条件をもとに選択し、そこに結果を出力
- ルールを使うと特定の位置に配置する
Smooth
- 入力値ぶん、マップデータをなめらかにする
Subtract
- 指定レイヤーからこのレイヤーを減算
生成用コード
SetCustomRandomSeed(int value)
- シード値をセット
ExecuteAllBlueprintLayers()
- ブループリントからデータを生成
ExecuteAllBuildLayers(true)
- 生成されたデータをもとにビルドを実行
- ランタイムでも実行可
- ExecuteAllBlueprintLayersの実行が終わった後に実行するのがベター
OnBlueprintLayersCompleteイベント
- ブループリント生成完了後に発火
- ここにExecuteAllBuildLayersを実行するメソッドを登録すると良い
OnBuildLayersCompleteイベント
- ビルド完了後に発火
- ブループリント生成完了後に実行すること
- デフォルトでは完了通知はここで出力するしかない
バグ(Version 3.1.2p1 - December 09, 2021)
Tile Colliderの南方向当たり判定が反転している
- スラッシュ型になっていないとならないのに、バックスラッシュ型になっている
- 要するに、中に入れるけど外に出れない状態
- これに付随してCollider Border Offsetも反転している
- 修正コードは下記
Collider Border Offsetをマイナス値設定すると、コーナーの一部に当たり判定がつかない
- これは仕様かなと思う
見落としがちなミス
ランタイムでマップビルド時に「Cannot combine....」とエラー表示される
- 使っているfbxの設定を参照、read/writeフラグを立てる
AddressableAssetSystem使用中、ビルド環境でのみTileWorldCreatorコンポーネントのアセット参照が切れる
- おそらくどうしようもないので、他から参照を埋め込むコードを作る