3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tilemapのブラシ拡張のための属性、CustomGridBrushについて

Posted at

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 
{
    /* 中略 */
}

このように、CustomGridBrushGridBrushクラスを継承したクラスに付与する属性です。


CustomGridBrushbool,bool,bool,string型のパラメータをとります。

それぞれ名前付き呼び出しで書くと次のようになります。

[CustomGridBrush(hideAssetInstances: true, hideDefaultInstance: false, defaultBrush: true, defaultName: "Default Brush")]
public class DefaultBrushReplacement : GridBrush 
{
    /* 中略 */
}

パラメータはそれぞれ最初から

  • boolhideAssetInstances
  • boolhideDefaultInstance
  • booldefaultBrush
  • stringdefaultName

です。


それぞれのパラメータを理解するためには、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、拡張していきましょう!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?