TH1/Unity/Assets/Scripts/TH1_Logic/Editor/GridVFXInfoDataAssetsGenerator.cs

205 lines
9.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using TH1Renderer;
namespace Logic.Editor
{
/// <summary>
/// 编辑器工具:生成 GridVFXInfoDataAssets 配置文件
/// </summary>
public class GridVFXInfoDataAssetsGenerator
{
[MenuItem("TH1 Tools/生成 GridVFXInfo 配置", false, 2100)]
public static void GenerateGridVFXInfoDataAssets()
{
// 创建 ScriptableObject 实例
var asset = ScriptableObject.CreateInstance<GridVFXInfoDataAssets>();
// 获取列表引用(通过反射或直接访问)
var listField = typeof(GridVFXInfoDataAssets).GetField("_gridVFXInfoList",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (listField == null)
{
Debug.LogError("无法获取 _gridVFXInfoList 字段");
return;
}
var vfxInfoList = new List<GridVFXInfoDataAssets.GridVFXInfo>();
// 获取 SpriteCache 和 AnimCache初始化会加载资源
var resourceCache = new TH1Resource.ResourceCache();
resourceCache.Init();
var spriteCache = resourceCache.SpriteCache;
var animCache = resourceCache.AnimCache;
// 填充配置数据
// ====== CommonVFX 组 ======
AddVFX(vfxInfoList, GridVFXType.Heal, "治疗", animCache?.GridVFXHeal,
spriteCache?.GridVFXHeal, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.CityConnect, "城市连接", animCache?.GridVFXHeal,
spriteCache?.GridVFXConnect, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.SakuyaGuard, "咲夜守卫", animCache?.GridVFXHeal,
spriteCache?.GridVFXSakuyaGuard, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
// 神签文本组
AddVFX(vfxInfoList, GridVFXType.LuckyText, "吉文本", animCache?.GridVFXHeal,
spriteCache?.GridVFXLuckyText, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.BigLuckyText, "大吉文本", animCache?.GridVFXHeal,
spriteCache?.GridVFXBigLuckyText, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.UnluckyText, "凶文本", animCache?.GridVFXHeal,
spriteCache?.GridVFXUnluckyText, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.BigUnluckyText, "大凶文本", animCache?.GridVFXHeal,
spriteCache?.GridVFXBigUnluckyText, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.Luxury, "奢侈品", animCache?.GridVFXHeal,
spriteCache?.GridVFXLuxury, "CommonVFX",
useCustomRenderer: false, tintColor: Color.white);
// ====== Treasure 组 ======
AddVFX(vfxInfoList, GridVFXType.Treasure, "宝藏", animCache?.GridVFXTreasure,
spriteCache?.GridVFXTreasure, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.RedMistCreate, "红雾", animCache?.GridVFXTreasure,
spriteCache?.GridVFXRedMistCreate, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
// 神签图标组
AddVFX(vfxInfoList, GridVFXType.Lucky, "吉", animCache?.GridVFXTreasure,
spriteCache?.GridVFXLucky, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.BigLucky, "大吉", animCache?.GridVFXTreasure,
spriteCache?.GridVFXBigLucky, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.Unlucky, "凶", animCache?.GridVFXTreasure,
spriteCache?.GridVFXUnlucky, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.BigUnlucky, "大凶", animCache?.GridVFXTreasure,
spriteCache?.GridVFXBigUnlucky, "Treasure",
useCustomRenderer: false, tintColor: Color.white);
// ====== Skill 组 ======
// ROYALFLAMES黄色2倍缩放
AddVFX(vfxInfoList, GridVFXType.ROYALFLAMES, "御柱之火", animCache?.GridVFXShowUp,
spriteCache?.GridVFXROYALFLAMES, "Skill",
useCustomRenderer: true, customRendererClass: "ROYALFLAMESGridVFXRenderer",
tintColor: Color.yellow, scale: new Vector3(2f, 2f, 1f));
AddVFX(vfxInfoList, GridVFXType.TewiFrenchBuff, "帝法式增益", animCache?.GridVFXShowUp,
spriteCache?.GridVFXTEWI, "Skill",
useCustomRenderer: true, customRendererClass: "TewiFrenchBuffGridVFXRenderer",
tintColor: Color.white, scale: Vector3.one);
AddVFX(vfxInfoList, GridVFXType.Coin, "金币", animCache?.GridVFXShowUp,
spriteCache?.GridVFXCoin, "Skill",
useCustomRenderer: true, customRendererClass: "CoinGridVFXRenderer",
tintColor: Color.white, scale: Vector3.one);
// KaguyaFrenchBuff1.5倍缩放
AddVFX(vfxInfoList, GridVFXType.KaguyaFrenchBuff, "辉夜增益", animCache?.GridVFXShowUp,
spriteCache?.GridVFXKAGUYA, "Skill",
useCustomRenderer: true, customRendererClass: "KaguyaFrenchBuffGridVFXRenderer",
tintColor: Color.white, scale: new Vector3(1.5f, 1.5f, 1f));
// ====== Damage 组 ======
AddVFX(vfxInfoList, GridVFXType.Damage, "伤害数字", animCache?.GridVFXDamage,
null, "Damage",
useCustomRenderer: true, customRendererClass: "DamageGridVFXRenderer",
tintColor: Color.white);
// ====== 其他组 ======
AddVFX(vfxInfoList, GridVFXType.Hurt, "受伤", animCache?.GridVFXHurt,
null, "Hurt",
useCustomRenderer: false, tintColor: Color.white);
// Fog使用 ShowOut 动画
AddVFX(vfxInfoList, GridVFXType.Fog, "战争迷雾", animCache?.GridVFXShowOut,
null, "Fog",
useCustomRenderer: false, tintColor: Color.white);
// Fire无动画无Sprite
AddVFX(vfxInfoList, GridVFXType.Fire, "火焰", null,
null, "Fire",
useCustomRenderer: false, tintColor: Color.white);
// Die 组
AddVFX(vfxInfoList, GridVFXType.Die, "死亡", animCache?.GridVFXDie,
spriteCache?.GridVFXDie, "Die",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.DieHint, "死亡预告", animCache?.GridVFXDieHint,
spriteCache?.GridVFXDie, "Die",
useCustomRenderer: false, tintColor: Color.white);
AddVFX(vfxInfoList, GridVFXType.CounterDieHint, "反击死亡预告", animCache?.GridVFXDieHint,
spriteCache?.GridVFXCounterDie, "Die",
useCustomRenderer: false, tintColor: Color.white);
// Flag特殊 Renderer
AddVFX(vfxInfoList, GridVFXType.Flag, "旗帜", animCache?.GridVFXHeal,
null, "Flag",
useCustomRenderer: true, customRendererClass: "FlagGridVFXRenderer",
tintColor: Color.white);
// 设置列表
listField.SetValue(asset, vfxInfoList);
// 创建 Asset
string path = "Assets/Resources/DataAssets/GridVFXInfoDataAssets.asset";
AssetDatabase.CreateAsset(asset, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log($"[GridVFXInfoDataAssetsGenerator] 配置已生成: {path}");
Debug.Log($"[GridVFXInfoDataAssetsGenerator] 共生成 {vfxInfoList.Count} 个 VFX 配置");
}
private static void AddVFX(
List<GridVFXInfoDataAssets.GridVFXInfo> list,
GridVFXType type,
string displayName,
AnimationClip animClip,
Sprite sprite,
string gameObjectPath,
bool useCustomRenderer = false,
string customRendererClass = "",
Color? tintColor = null,
Vector3? scale = null)
{
var info = new GridVFXInfoDataAssets.GridVFXInfo
{
Type = type,
DisplayName = displayName,
AnimClip = animClip,
Sprite = sprite,
GameObjectPath = gameObjectPath,
TintColor = tintColor ?? Color.white,
Scale = scale ?? Vector3.one,
UseCustomRenderer = useCustomRenderer,
CustomRendererClassName = customRendererClass,
AudioClipPath = "",
LifetimeOverride = -1
};
list.Add(info);
}
}
}