← Files UnityARCHIVED FILE

skills/tilemap-ruletile-createfromsegment/scripts/RuleTileGenerator.cs

1.87 KB · Oct 5, 2026 · 18:34 UTC

↓ Download file

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