205 lines
9.2 KiB
C#
205 lines
9.2 KiB
C#
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);
|
||
|
||
// KaguyaFrenchBuff:1.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);
|
||
}
|
||
}
|
||
}
|