コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Tilemap の SetTile で int や Vector2Int を渡せるようにする拡張メソッド

ソースコード using UnityEngine; using UnityEngine.Tilemaps; public static class TilemapExtensions { public static void SetTile ( this Tilemap self, int x, int y, TileBase tile ) { self.SetTile( new Vector3Int( x, y, 0 ), tile ); } public s…

【Unity】Tilemap のすべての Position を取得する拡張メソッド

ソースコード using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public static class TilemapExtensions { public static IEnumerable<Vector3Int> GetPositions( this Tilemap self ) { var bound = self.cellBounds; for ( var x = </vector3int>…

【Unity】タイルマップの各タイルの当たり判定を結合する方法

概要 タイルマップの各タイルの当たり判定を結合したい場合は Tilemap Collider 2D を保持しているゲームオブジェクトに 「Rigidbody 2D」と「Composite Collider 2D」を Add Component して Rigidbody 2D の「Body Type」を「Dynamic」以外にして Tilemap C…

【Unity】TerrainTile の当たり判定を Sprite から Grid に変更する方法

概要 TerrainTile は通常は当たり判定がスプライト状になりますが tileData.colliderType = Tile.ColliderType.Sprite; TerrainTile.cs 75 行目の上記の処理を tileData.colliderType = Tile.ColliderType.Grid; このように書き換えることで 当たり判定をグ…

【Unity】タイルマップのエディタ拡張に関する記事まとめ

はじめに 当ブログで紹介してきたタイルマップのエディタ拡張に関する記事をまとめました まとめ 自作したエディタ拡張 Inspector に Compress Bounds のボタンを追加 Inspector に Refresh All Tiles を実行するボタンを追加 すべてのタイルを上下左右にず…

【Unity】Tilemap の Inspector に Compress Bounds のボタンを追加するエディタ拡張

ソースコード using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.Tilemaps; [CustomEditor( typeof( Tilemap ) )] public sealed class TilemapEditor : Editor { public override void OnInspectorGUI() { base…

【Unity】Tilemap のすべてのタイルを上下左右にずらすボタンを Scene ビューに表示するエディタ拡張

ソースコード using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Tilemaps; [InitializeOnLoad] internal static class TilemapShifter { private class TileInfo { public readonly Vector3Int m_position; publ…

【Unity】Tilemap のすべてのタイルを上下左右にずらす EditorWindow のエディタ拡張

ソースコード using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Tilemaps; [InitializeOnLoad] internal static class TilemapShifter { private class TileInfo { public readonly Vector3Int m_position; publ…

【Unity】Tilemap のすべてのタイルをカーソルキーで上下左右にずらすことができるエディタ拡張

ソースコード using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Tilemaps; [InitializeOnLoad] internal static class TilemapShifter { private class TileInfo { public readonly Vector3Int m_position; publ…

【Unity】Tilemap からすべてのタイルの情報を参照するサンプル

ソースコード var tilemap = GameObject.FindObjectOfType<Tilemap>(); var bound = tilemap.cellBounds; for ( int y = bound.max.y - 1; y >= bound.min.y; --y ) { for ( int x = bound.min.x; x < bound.max.x; ++x ) { var pos = new Vector3Int( x, y, 0 ); // </tilemap>…

【Unity】Tilemap の Inspector に Refresh All Tiles を実行するボタンを追加するエディタ拡張

概要 using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.Tilemaps; [CustomEditor(typeof(Tilemap))] public sealed class TilemapEditor : Editor { public override void OnInspectorGUI() { base.OnInspector…

【Unity】エディタでシーンを開いた時に Tilemap のすべてタイルを自動でリフレッシュするエディタ拡張

概要 using System.Linq; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; using UnityEngine.Tilemaps; [InitializeOnLoad] public static class AllTilesRefresher { static AllTilesRefresher() { EditorScen…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette で選択されているパレットをスクリプトから取得・設定できる

概要 using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { // 選択中のパレットを取得する Debug.Log( GridPaintingState.palette ); // 選択中のパ…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette で選択されているブラシをスクリプトから取得・設定できる

概要 using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; // Tile Palette で使用できるすべてのブラシを管理するクラス public static class GridPaletteBrush…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette の Active Tilemap をスクリプトから取得・設定できる

概要 using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { // Active Tilemap が変更された時に呼び出される GridPaintingState.scenePaintTargetChanged += OnChange…

【Unity】Tilemap の Tile Palette で選択されているツールをスクリプトから変更する方法

ソースコード using System; using System.Reflection; using UnityEditor; public static class GridPaintPaletteWindowUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic; privat…

【Unity】Tilemap の Tile Palette は内部的には GridPaintPaletteWindow という EditorWindow

概要 Tilemap の Tile Palette は内部的には GridPaintPaletteWindow という EditorWindow で構成されています Unity エディタを開発者モードにすることで確認できます 関連記事

【Unity】Tilemap の Tile Palette で選択されているブラシをスクリプトから変更する方法

ソースコード using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; public static class GridPaintingStateUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | Bindin…

【Unity】Tilemap の Tile Palette に登録されているすべてのブラシを取得する方法

ソースコード using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; public static class GridPaletteBrushesUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | Bindi…

【Unity】Tilemap で Tile Palette のブラシが変更された時に呼び出されるイベント

ソースコード using System; using System.Reflection; using UnityEditor; using UnityEngine; public static class EditorApplicationUtility { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static re…

【Unity】Tilemap で Tile Palette の Active Tilemap が変更された時に呼び出されるイベント

ソースコード using System; using System.Reflection; using UnityEditor; using UnityEngine; public static class EditorApplicationUtility { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static re…

【Unity】Tilemap が複製された時に、複製された Tilemap を Tile Palette の Active Tilemap に自動で設定するエディタ拡張

概要 Tilemap が複製された時は Tile Palette の Active Tilemap は変化しないですが using System.Reflection; using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.hierarchyChanged += OnChanged…

【Unity】Tilemap で Tile Palette の Active Tilemap をスクリプトから変更する方法

概要 using System.Reflection; using UnityEditor; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var assembly = typeof( AssetDatabase ).Assembly; var type = assembly.GetType( "UnityEditor.GridPaintingState" )…

【Unity】タイルマップ - 塗ったタイルをすべて削除するエディタ拡張

ソースコード using UnityEditor; using UnityEngine; using UnityEngine.Tilemaps; public static class TilemapEditorUtils { [MenuItem( "CONTEXT/Grid/Clear All Tiles" )] private static void ClearAllTilesFromGrid( MenuCommand menuCommand ) { var…

【Unity】タイルマップ - 塗ったタイルを矩形ツールで削除する方法

概要 矩形ツールを選択した状態で Shift を押しながら左クリック&ドラッグすることで、タイルを矩形で削除することができます

【Unity】Tiled Map Editor で作成したマップを Unity のタイルマップに変換できる「SuperTiled2Unity」紹介

はじめに 「SuperTiled2Unity」を Unity プロジェクトに導入することで Tiled Map Editor で作成したマップを Unity のタイルマップに変換できるようになります 使い方 Unity プロジェクトに タイルマップのファイル(.tmx) タイルセットのファイル(.tsx)…

【Unity】タイルマップ - 隙間が見えてちらつく時の対応方法

はじめに ここでは、タイルマップの隙間が見えてちらつく時の対応方法を紹介していきます テクスチャの設定の見直し タイルマップで使用しているテクスチャを選択し、 「Filter Mode」を「Point (no filter)」に変更し、「Apply」ボタンを押します アンチエ…

【Unity】タイルマップの使い方、便利な機能、エディタ拡張など17件の記事に分けて紹介

はじめに この記事では、Unity 2017.2 から使用できるタイルマップの使い方をまとめました 基本 基本的な使い方 コンテキストメニュー 便利なタイル アニメーション付きのタイルを塗ることができる「Animated Tile」 パイプをつなぐようにタイルを塗ることが…

【Unity】タイルマップ - ブラシを自作する方法

はじめに Unity のタイルマップでは、ブラシを自作することができます この記事では、ブラシを自作する方法を紹介していきます 作成方法 ブラシの作成はエディタ拡張となるため、 Unity プロジェクトの「Editor」フォルダ内にスクリプトを作成する必要があり…

【Unity】タイルマップ - ブラシを自作してみる

はじめに Unity のタイルマップではブラシを自作することができます この記事では、3 x 3 マスのサイズのブラシを自作してみます 作り方 「Editor」フォルダに「BoldBrush」スクリプトを作成して、 上記のコードを貼り付けて保存します そして、TIle Palette…