← Files UnityARCHIVED FILE
skills/tilemap-ruletile-createfromsegment/scripts/RuleTileGenerator.cs
1.87 KB · Oct 5, 2026 · 18:34 UTC
using System.Linq;
using UnityEditor;
using UnityEngine;
public class RuleTileGenerator : EditorWindow
{
float m_MatchThreshold = 0.75f;
[MenuItem("Tools/Generate RuleTile from Sprites")]
static void ShowWindow()
{
GetWindow<RuleTileGenerator>("RuleTile Generator");
}
void OnGUI()
{
GUILayout.Label("Match Threshold", EditorStyles.boldLabel);
m_MatchThreshold = EditorGUILayout.Slider(m_MatchThreshold, 0.5f, 0.9f);
if (GUILayout.Button("Generate from Selected Texture"))
GenerateRuleTile();
}
void GenerateRuleTile()
{
var texture = Selection.activeObject as Texture2D;
if (texture == null)
{
Debug.LogError("Please select a Texture2D asset");
return;
}
// Get sprites from texture
string path = AssetDatabase.GetAssetPath(texture);
var sprites = AssetDatabase.LoadAllAssetsAtPath(path).OfType<Sprite>().ToList();
if (sprites.Count == 0)
{
Debug.LogError("No sprites found in texture. Ensure texture is sliced.");
return;
}
// Complete workflow: sprite-segment-3x3grid -> TilingRules
var rules = TilemapRuleTileCreateFromSegment.CreateRuleTileFromSprites(
sprites,
matchThreshold: m_MatchThreshold
);
// Create and save RuleTile asset
var ruleTile = ScriptableObject.CreateInstance<RuleTile>();
TilemapRuleTileCreateFromSegment.ApplyRulesToTile(ruleTile, rules);
string savePath = path.Replace(".png", "_RuleTile.asset")
.Replace(".jpg", "_RuleTile.asset");
AssetDatabase.CreateAsset(ruleTile, savePath);
AssetDatabase.SaveAssets();
Debug.Log($"Created RuleTile with {rules.Count} rules at {savePath}");
Selection.activeObject = ruleTile;
}
}
SHA-256: f6ec203822e605d1e92ded2cd24fa4ba068b6a5540c6f621909f061236e54a04