Unityの2DマップエディターであるTilemap。このTilemapはTile・Brushを拡張することができます。
この投稿では、Brushの拡張で使う「CustomGridBrush」属性について説明します。
CustomGridBrushの利用例を次に示します。
それぞれのコードはUnity公式サンプルの2d-gamedemo-robodashのものです。
[CreateAssetMenu]
[CustomGridBrush(false, true, false, "Level")]
public class LevelBrush : GridBrushBase {
/* 中略 */
}
[CustomGridBrush(true, false, false, "Tint")]
public class TintBrush : GridBrushBase {
/* 中略 */
}
[CustomGridBrush(true, true, true, "Default Brush")]
public class DefaultBrushReplacement : GridBrush
{
/* 中略 */
}
このように、CustomGridBrushはGridBrushクラスを継承したクラスに付与する属性です。
CustomGridBrushはbool,bool,bool,string型のパラメータをとります。
それぞれ名前付き呼び出しで書くと次のようになります。
[CustomGridBrush(hideAssetInstances: true, hideDefaultInstance: false, defaultBrush: true, defaultName: "Default Brush")]
public class DefaultBrushReplacement : GridBrush
{
/* 中略 */
}
パラメータはそれぞれ最初から
-
boolのhideAssetInstances -
boolのhideDefaultInstance -
boolのdefaultBrush -
stringのdefaultName
です。
それぞれのパラメータを理解するためには、3種類のBrushについて理解する必要があります。
Brushには
- アセット(ScriptableObject)を作るBursh
- アセット(ScriptableObject)を作らないBrush
- デフォルトを書き換えるのBrush
があります。
「アセット(ScriptableObject)を作るBursh」の利用例としては、特定のプレファブを設置するBrushがあげられます。このBrushは「同じ機能を持つBrushをアセットとして複数作って、それぞれ違うプレファブを設置できるようにする」ということができます。この種類のBrushは「同じ機能を持っているけれど、別の設定値を持っているBrush」を個別にアセットとして生成します。LevelBrush、TeleportBrushやLaserBrushなど「2d-gamedemo-robodash」プロジェクトの多くのBrushが「アセットを作るBrush」です。プロジェクト中にScriptableObjectとして、Brushが存在することに注目してください。
「アセット(ScriptableObject)を作らないBrush」の利用例としては、線を引くBrush、座標情報を表示するBrsuhなどの機能を提供するBrushがあります。「線を引く機能」はバリエーションを作る必要がありません。このようにバリエーションを作る必要がないBrushは、「アセット(ScriptableObject)を作らないBrush」となります。2d-gamedemo-robodash中のTintBrush、そして2d-extras中の、LineBrushやCordinateBrushが「アセット(ScriptableObject)を作らないBrush」です。
「デフォルトを書き換えるのBrush」は、Unityが提供するデフォルトのBrushを置き換えるBrushです。2d-gamedemo-robodashでは、デフォルトのBrushを置き換えています。
それぞれのパラメータの意味を紹介します。
-
hideAssetInstancesがtrueだと、プロジェクト中のアセット(ScriptableObject)として作られたBrushは、Tile Palette Windowから選べなくなります。その型のBrushをアセットとして作る意味がなくなります。 -
hideDefaultInstanceがfalseだと、プロジェクト中にアセットとして作られたその型のBrushがなくてもデフォルトのBrushが作られ、Tile Palette Windowから選べます。trueだとTile Palette Windowから選べばせん。 -
defaultBrushがtrueだと、Unityが提供する標準のBrushを置き換えます。プロジェクトの中で一つのBrushだけtrueにすべきですね。 -
defaultNameは、その型のBrushのデフォルトBrushの名前です。これを設定しない場合、型名からBrush名が作られます。
先のコードにあげたパラメータを確認・解説します。
まずはDefaultBrushReplacement。
[CreateAssetMenu]
[CustomGridBrush(false, true, false, "Level")]
public class LevelBrush : GridBrushBase {
/* 中略 */
}
これはアセット(ScriptableObject)を作るBurshです。
-
hideAssetInstancesはfalseです。プロジェクト中にアセット(ScriptableObject)を作りたいので、falseにする必要がありますね。 -
hideDefaultInstanceはtrueです。デフォルトのBrush入らないのでtrueにした方がいいですね。 -
defaultBrushはfalseです。Unityが提供する標準のBrushを置き換えないのでfalseですね。 -
defaultNameは、"Level"になっていますが、DefaultのBrushは無効なので実際は意味がありませんね。
次にTintBrush。
これはアセット(ScriptableObject)を作らないでデフォルトのBrushのみを使うBrushです。
[CustomGridBrush(true, false, false, "Tint")]
public class TintBrush : GridBrushBase {
/* 中略 */
}
-
hideAssetInstancesはtrueです。プロジェクト中にアセット(ScriptableObject)を作らないので、trueにする必要がありますね。 -
hideDefaultInstanceはfalseです。デフォルトのBrushが必要なのでfalseにしなくてはいけませんね。 -
defaultBrushはfalseです。Unityが提供する標準のBrushを置き換えないのでfalseですね。 -
defaultNameは、"Tint"になっています。
最後にDefaultBrushReplacement。
[CustomGridBrush(true, false, false, "Tint")]
public class TintBrush : GridBrushBase {
/* 中略 */
}
}
Unityが提供する標準のBrushを置き換えるBrushです。プロジェクト中のアセット(ScriptableObject)は作りません。
-
hideAssetInstancesはtrueです。プロジェクト中のアセット(ScriptableObject)を作らないので、trueでいいですね。 -
hideDefaultInstanceはtrueです。一見これはfalseでもよさそうですね。hideDefaultInstanceをfalseにしdefaultBrushをtrueにすると、そう設定したBrushがTile Palette Windowで二つ重複して出てきてしまいます。 -
defaultBrushはtrueです。Unityが提供する標準のBrushを置き換えたいのでtrueですね。 -
defaultNameは、"Default Brush"
この投稿では、Tilemapのブラシ拡張のための属性、CustomGridBrushについて紹介しました。
ガンガンBrush、拡張していきましょう!