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、拡張していきましょう!