130 子 【战斗】战斗系统 / 【战斗】战斗系统-客户端 飘血+配置优化
6个文件已修改
7个文件已添加
480 ■■■■■ 已修改文件
Main/Common/EventName.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/ConfigBase.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/ConfigManager.cs 177 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/ResModule/ResManager.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleHUDWin.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleHUDWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/DamageContent.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/DamageContent.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/DamageLine.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/DamageLine.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventName.cs
@@ -2,6 +2,11 @@
public class EventName
{
    public const string BATTLE_BUFF_MOUNTED = "BATTLE_BUFF_MOUNTED";//BUFF MOUNTED
    public const string BATTLE_BUFF_DISAPEAR = "BATTLE_BUFF_DISAPEAR";//BUFF DISAPEAR
    public const string BATTLE_DAMAGE_TAKEN = "BATTLE_DAMAGE_TAKEN";//造成伤害
    
}
Main/Config/ConfigBase.cs
@@ -13,11 +13,7 @@
    public static T Get(U id)
    {
        if (!isInit)
        {
            Debug.LogError("ConfigBase 没有初始化");
            return null; // 或者抛出异常,视情况而定
        }
        LazyInit();
        if (dic.ContainsKey(id))
        {
@@ -34,11 +30,7 @@
    public static List<U> GetKeys()
    {
        if (!isInit)
        {
            Debug.LogError(typeof(U).Name + " 没有初始化 GetKeys");
            return null; // 或者抛出异常,视情况而定
        }
        LazyInit();
        List<U> result = new List<U>();
        result.AddRange(dic.Keys);
        return result;
@@ -47,11 +39,7 @@
    public static List<T> GetValues()
    {
        if (!isInit)
        {
            Debug.LogError(typeof(T).Name + " 没有初始化 GetValues");
            return null; // 或者抛出异常,视情况而定
        }
        LazyInit();
        List<T> result = new List<T>();
        result.AddRange(dic.Values);
        return result;
@@ -59,15 +47,20 @@
    public static bool HasKey(U key)
    {
        if (!isInit)
        {
            Debug.LogError(typeof(T).Name + " 没有初始化 HasKey");
            return false; // 或者抛出异常,视情况而定
        }
        LazyInit();
        return dic.ContainsKey(key);
    }
    public static void LazyInit()
    {
        if (!isInit)
        {
            //  实际上是同步的
            ConfigManager.Instance.LoadConfigByType(typeof(T));
        }
    }
    public static void Init(string[] lines)
    {
        dic.Clear();
Main/Config/ConfigManager.cs
@@ -33,81 +33,52 @@
        isLoadFinished = false;
        // 加载配置文件
        int totalConfigs = 65;
        int totalConfigs = 17;
        Type[] configTypes = new Type[] {
            typeof(AppointItemConfig),
            typeof(AudioConfig),
            typeof(ChatBubbleBoxConfig),
            typeof(ChestsAwardConfig),
            typeof(ChestsConfig),
            typeof(CTGConfig),
            typeof(CTGSelectItemConfig),
            typeof(DailyLivenessRewardConfig),
            typeof(DailyQuestConfig),
            typeof(DailyQuestOpenTimeConfig),
            typeof(DienstgradConfig),
            typeof(DirtyNameConfig),
            typeof(DirtyWordConfig),
            typeof(EffectConfig),
            typeof(EmojiPackConfig),
            typeof(EquipGSParamConfig),
            typeof(EquipPlaceMapConfig),
            typeof(FamilyConfig),
            typeof(FamilyEmblemConfig),
            typeof(FirstGoldConfig),
            typeof(FrameAnimationConfig),
            typeof(FuncConfigConfig),
            typeof(FuncOpenLVConfig),
            typeof(FunctionTeamSetConfig),
            typeof(GetItemWaysConfig),
            typeof(GmCmdConfig),
            typeof(GuideConfig),
            typeof(HeroAwakeConfig),
            typeof(HeroBreakConfig),
            typeof(HeroConfig),
            typeof(HeroFetterConfig),
            typeof(HeroQualityAwakeConfig),
            typeof(HeroQualityBreakConfig),
            typeof(HeroQualityConfig),
            typeof(HeroSkinConfig),
            typeof(HeroTalentConfig),
            typeof(IconConfig),
            typeof(ItemConfig),
            typeof(KickOutReasonConfig),
            typeof(LanguageConfig),
            typeof(MailConfig),
            typeof(NPCConfig),
            typeof(NPCExConfig),
            typeof(OrderInfoConfig),
            typeof(PlayerFaceConfig),
            typeof(PlayerFacePicConfig),
            typeof(PlayerFacePicStarConfig),
            typeof(PlayerFaceStarConfig),
            typeof(PlayerLVConfig),
            typeof(PlayerPropertyConfig),
            typeof(priorbundleConfig),
            typeof(RealmConfig),
            typeof(RealmLVUPTaskConfig),
            typeof(RichTextMsgReplaceConfig),
            typeof(RuleConfig),
            typeof(SkillConfig),
            typeof(StoreConfig),
            typeof(SuccessConfig),
            typeof(SysInfoConfig),
            typeof(TaskConfig),
            typeof(TitleStarUpConfig),
            typeof(TreasureCntAwardConfig),
            typeof(TreasureItemLibConfig),
            typeof(TreasureSetConfig),
            typeof(XBGetItemConfig)
        };
#if UNITY_EDITOR
        List<string> fastName = new List<string>();
#endif
        // 逐个加载配置并更新进度
        for (int i = 0; i < configTypes.Length; i++)
        {
            var sw = System.Diagnostics.Stopwatch.StartNew();
            await LoadConfigByType(configTypes[i]);
            sw.Stop();
#if UNITY_EDITOR
            if (sw.ElapsedMilliseconds >= 100)
            {
                Debug.LogError($"加载配置 {configTypes[i].Name} 耗时较长: {sw.ElapsedMilliseconds} ms");
            }
            else if (sw.ElapsedMilliseconds <= 5)
            {
                fastName.Add(configTypes[i].Name);
            }
            Debug.Log($"加载配置: {configTypes[i].Name} 用时: {sw.ElapsedMilliseconds} ms");
#endif
            loadingProgress = (float)(i + 1) / totalConfigs;
        }
#if UNITY_EDITOR
        System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName));
#endif
        // 加载完成后设置isLoadFinished为true
        loadingProgress = 1f;
@@ -121,10 +92,10 @@
        {
            configName = configName.Substring(0, configName.Length - 6);
        }
        TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName);
        if (textAsset != null)
        string[] texts = ResManager.Instance.LoadConfig(configName);
        if (texts != null)
        {
            string[] lines = textAsset.text.Split('\n');
            string[] lines = texts;
            var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
            if (methodInfo != null)
            {
@@ -152,10 +123,10 @@
    {
        string configName = typeof(T).Name;
        TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName);
        if (textAsset != null)
        string[] texts = ResManager.Instance.LoadConfig(configName);
        if (texts != null)
        {
            string[] lines = textAsset.text.Split('\n');
            string[] lines = texts;
            var methodInfo = typeof(T).GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
            if (methodInfo != null)
            {
@@ -196,130 +167,34 @@
    public override void Release()
    {
        // 清空 AppointItemConfig 字典
        ClearConfigDictionary<AppointItemConfig>();
        // 清空 AudioConfig 字典
        ClearConfigDictionary<AudioConfig>();
        // 清空 ChatBubbleBoxConfig 字典
        ClearConfigDictionary<ChatBubbleBoxConfig>();
        // 清空 ChestsAwardConfig 字典
        ClearConfigDictionary<ChestsAwardConfig>();
        // 清空 ChestsConfig 字典
        ClearConfigDictionary<ChestsConfig>();
        // 清空 CTGConfig 字典
        ClearConfigDictionary<CTGConfig>();
        // 清空 CTGSelectItemConfig 字典
        ClearConfigDictionary<CTGSelectItemConfig>();
        // 清空 DailyLivenessRewardConfig 字典
        ClearConfigDictionary<DailyLivenessRewardConfig>();
        // 清空 DailyQuestConfig 字典
        ClearConfigDictionary<DailyQuestConfig>();
        // 清空 DailyQuestOpenTimeConfig 字典
        ClearConfigDictionary<DailyQuestOpenTimeConfig>();
        // 清空 DienstgradConfig 字典
        ClearConfigDictionary<DienstgradConfig>();
        // 清空 DirtyNameConfig 字典
        ClearConfigDictionary<DirtyNameConfig>();
        // 清空 DirtyWordConfig 字典
        ClearConfigDictionary<DirtyWordConfig>();
        // 清空 EffectConfig 字典
        ClearConfigDictionary<EffectConfig>();
        // 清空 EmojiPackConfig 字典
        ClearConfigDictionary<EmojiPackConfig>();
        // 清空 EquipGSParamConfig 字典
        ClearConfigDictionary<EquipGSParamConfig>();
        // 清空 EquipPlaceMapConfig 字典
        ClearConfigDictionary<EquipPlaceMapConfig>();
        // 清空 FamilyConfig 字典
        ClearConfigDictionary<FamilyConfig>();
        // 清空 FamilyEmblemConfig 字典
        ClearConfigDictionary<FamilyEmblemConfig>();
        // 清空 FirstGoldConfig 字典
        ClearConfigDictionary<FirstGoldConfig>();
        // 清空 FrameAnimationConfig 字典
        ClearConfigDictionary<FrameAnimationConfig>();
        // 清空 FuncConfigConfig 字典
        ClearConfigDictionary<FuncConfigConfig>();
        // 清空 FuncOpenLVConfig 字典
        ClearConfigDictionary<FuncOpenLVConfig>();
        // 清空 FunctionTeamSetConfig 字典
        ClearConfigDictionary<FunctionTeamSetConfig>();
        // 清空 GetItemWaysConfig 字典
        ClearConfigDictionary<GetItemWaysConfig>();
        // 清空 GmCmdConfig 字典
        ClearConfigDictionary<GmCmdConfig>();
        // 清空 GuideConfig 字典
        ClearConfigDictionary<GuideConfig>();
        // 清空 HeroAwakeConfig 字典
        ClearConfigDictionary<HeroAwakeConfig>();
        // 清空 HeroBreakConfig 字典
        ClearConfigDictionary<HeroBreakConfig>();
        // 清空 HeroConfig 字典
        ClearConfigDictionary<HeroConfig>();
        // 清空 HeroFetterConfig 字典
        ClearConfigDictionary<HeroFetterConfig>();
        // 清空 HeroQualityAwakeConfig 字典
        ClearConfigDictionary<HeroQualityAwakeConfig>();
        // 清空 HeroQualityBreakConfig 字典
        ClearConfigDictionary<HeroQualityBreakConfig>();
        // 清空 HeroQualityConfig 字典
        ClearConfigDictionary<HeroQualityConfig>();
        // 清空 HeroSkinConfig 字典
        ClearConfigDictionary<HeroSkinConfig>();
        // 清空 HeroTalentConfig 字典
        ClearConfigDictionary<HeroTalentConfig>();
        // 清空 IconConfig 字典
        ClearConfigDictionary<IconConfig>();
        // 清空 ItemConfig 字典
        ClearConfigDictionary<ItemConfig>();
        // 清空 KickOutReasonConfig 字典
        ClearConfigDictionary<KickOutReasonConfig>();
        // 清空 LanguageConfig 字典
        ClearConfigDictionary<LanguageConfig>();
        // 清空 MailConfig 字典
        ClearConfigDictionary<MailConfig>();
        // 清空 NPCConfig 字典
        ClearConfigDictionary<NPCConfig>();
        // 清空 NPCExConfig 字典
        ClearConfigDictionary<NPCExConfig>();
        // 清空 OrderInfoConfig 字典
        ClearConfigDictionary<OrderInfoConfig>();
        // 清空 PlayerFaceConfig 字典
        ClearConfigDictionary<PlayerFaceConfig>();
        // 清空 PlayerFacePicConfig 字典
        ClearConfigDictionary<PlayerFacePicConfig>();
        // 清空 PlayerFacePicStarConfig 字典
        ClearConfigDictionary<PlayerFacePicStarConfig>();
        // 清空 PlayerFaceStarConfig 字典
        ClearConfigDictionary<PlayerFaceStarConfig>();
        // 清空 PlayerLVConfig 字典
        ClearConfigDictionary<PlayerLVConfig>();
        // 清空 PlayerPropertyConfig 字典
        ClearConfigDictionary<PlayerPropertyConfig>();
        // 清空 priorbundleConfig 字典
        ClearConfigDictionary<priorbundleConfig>();
        // 清空 RealmConfig 字典
        ClearConfigDictionary<RealmConfig>();
        // 清空 RealmLVUPTaskConfig 字典
        ClearConfigDictionary<RealmLVUPTaskConfig>();
        // 清空 RichTextMsgReplaceConfig 字典
        ClearConfigDictionary<RichTextMsgReplaceConfig>();
        // 清空 RuleConfig 字典
        ClearConfigDictionary<RuleConfig>();
        // 清空 SkillConfig 字典
        ClearConfigDictionary<SkillConfig>();
        // 清空 StoreConfig 字典
        ClearConfigDictionary<StoreConfig>();
        // 清空 SuccessConfig 字典
        ClearConfigDictionary<SuccessConfig>();
        // 清空 SysInfoConfig 字典
        ClearConfigDictionary<SysInfoConfig>();
        // 清空 TaskConfig 字典
        ClearConfigDictionary<TaskConfig>();
        // 清空 TitleStarUpConfig 字典
        ClearConfigDictionary<TitleStarUpConfig>();
        // 清空 TreasureCntAwardConfig 字典
        ClearConfigDictionary<TreasureCntAwardConfig>();
        // 清空 TreasureItemLibConfig 字典
        ClearConfigDictionary<TreasureItemLibConfig>();
        // 清空 TreasureSetConfig 字典
Main/ResModule/ResManager.cs
@@ -164,6 +164,23 @@
        return asset;
    }
    public string[] LoadConfig(string name)
    {
        string path = string.Empty;
        if (!AssetSource.isUseAssetBundle)
        {
#if UNITY_EDITOR
            path = ResourcesPath.CONFIG_FODLER + "/" + name + ".txt";
#endif
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt");
        }
        return File.ReadAllLines(path);
    }
    private Sprite LoadSprite(string atlasName, string spriteName)
    {
#if !UNITY_EDITOR
Main/System/Battle/BattleHUDWin.cs
New file
@@ -0,0 +1,119 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using DG.Tweening;
using Cysharp.Threading.Tasks;
//  这个界面是 persistent的界面
public class BattleHUDWin : UIBase
{
    // 组件引用
    // private List<HUDContent> damageList = new List<HUDContent>();
    // private List<BuffContent> buffList = new List<BuffContent>();
    private GameObjectPoolManager.GameObjectPool damagePrefabPool;
    private GameObjectPoolManager.GameObjectPool buffIconPrefabPool;
    private GameObjectPoolManager.GameObjectPool buffLabelPrefabPool;
    public Transform damageNode;
    public Transform buffIconNode;
    public Transform buffLabelNode;
    // 生命周期
    protected override void InitComponent()
    {
        base.InitComponent();
        // 初始化组件引用 绑定按钮等UI组件事件
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        EventBroadcast.Instance.AddListener<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
        EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted);
        EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear);
        damagePrefabPool = GameObjectPoolManager.Instance.RequestPool(ResManager.Instance.LoadAsset<GameObject>("UIComp", "DamageContent"));
        // buffIconPrefabPool = GameObjectPoolManager.Instance.RequestPool();
        // buffLabelPrefabPool = GameObjectPoolManager.Instance.RequestPool(ResManager.Instance.LoadAsset<GameObject>("UIComp", "BuffContent"));
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        EventBroadcast.Instance.RemoveListener<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
        EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted);
        EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear);
    }
    protected override void OnOpen()
    {
        base.OnOpen();
    }
    protected override void OnClose()
    {
        base.OnClose();
    }
    protected override void NextFrameAfterOpen()
    {
        base.NextFrameAfterOpen();
    }
    protected override void CompleteClose()
    {
        base.CompleteClose();
    }
    private void OnDamageTaken(BattleObject bo, List<int> damageList)
    {
        GameObject damageContent = damagePrefabPool.Request();
        DamageContent content = damageContent.GetComponent<DamageContent>();
        damageContent.transform.SetParent(damageNode, false);
        damageContent.transform.localPosition = new Vector3(damageContent.transform.localPosition.x, damageContent.transform.localPosition.y, 0);
        content.SetDamage(damageList, () => damagePrefabPool.Release(damageContent));
        // heroGo 的 parent 作为参考节点
        var heroGo = bo.heroGo;
        if (heroGo == null)
            return;
        var heroRect = heroGo.GetComponent<RectTransform>();
        if (heroRect == null)
            return;
        // 计算 heroGo 在 content 父节点下的 anchoredPosition
        var contentRect = content.GetComponent<RectTransform>();
        var contentParentRect = contentRect.parent as RectTransform;
        // 获取 heroGo 的世界坐标
        Vector3 worldTargetPos = heroRect.TransformPoint(heroRect.anchoredPosition);
        // 转换到 content 父节点下的 anchoredPosition
        Vector2 anchoredPos;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(
            contentParentRect,
            RectTransformUtility.WorldToScreenPoint(null, worldTargetPos),
            null,
            out anchoredPos);
        contentRect.anchoredPosition = anchoredPos;
    }
    private void OnBuffMounted(BattleObject bo, SkillConfig buffConfig)
    {
    }
    private void OnBuffDisapear(BattleObject bo, SkillConfig buffConfig)
    {
    }
}
Main/System/Battle/BattleHUDWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 16f4cd28fdf242645943d06ae9d87c97
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Battle/BattleObject/BattleObject.cs
@@ -40,7 +40,11 @@
    protected MotionBase motionBase;
    protected GameObject heroGo;
    public GameObject heroGo
    {
        get;
        private set;
    }
    public BattleObject(BattleField _battleField)
    {
@@ -192,6 +196,7 @@
            totalDamage += damage;
        }
        //  扣血
        teamHero.curHp -= totalDamage;
@@ -200,6 +205,7 @@
        // {
        //     OnDeath();
        // }
    }
    //  闪避开始
@@ -251,6 +257,8 @@
        {
            Debug.Log($"Damage: {damage}");
        }
        EventBroadcast.Instance.Broadcast<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, this, damageValues);
    }
    public void PlaySkill(SkillConfig skillConfig, List<Dictionary<int, List<int>>> damageList, Action _onComplete)
@@ -378,7 +386,15 @@
        int totalDamage = teamHero.attack - obj.teamHero.defense;
        damageList.Add(totalDamage);
        int damage1 = (int)((float)totalDamage * 0.3f);
        int damage2 = (int)((float)totalDamage * 0.25f);
        int damage3 = totalDamage - damage1 - damage2;
        damageList.Add(damage1);
        damageList.Add(damage2);
        damageList.Add(damage3);
        return damageList;
    }
Main/System/Battle/BattleWin.cs
@@ -24,11 +24,15 @@
        base.OnPreOpen();
        SetBattleField(BattleManager.Instance.storyBattleField);
        if (!UIManager.Instance.GetUI<BattleHUDWin>())
            UIManager.Instance.OpenWindow<BattleHUDWin>();
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        UIManager.Instance.CloseWindow<BattleHUDWin>();
    }
    protected override void OnOpen()
Main/System/Battle/UIComp.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2df384ebef02f254193d75f1dfecdb76
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Battle/UIComp/DamageContent.cs
New file
@@ -0,0 +1,41 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class DamageContent : MonoBehaviour
{
    public GameObject line;
    public RectTransform parent;
    protected List<DamageLine> damageLineList = new List<DamageLine>();
    public PositionTween posTween;
    void Awake()
    {
        line.SetActive(false);
    }
    public void SetDamage(List<int> damages, Action _onComplete)
    {
        for (int i = 0; i < damages.Count; i++)
        {
            if (i >= damageLineList.Count)
            {
                GameObject newLine = GameObject.Instantiate(line, parent);
                damageLineList.Add(newLine.GetComponent<DamageLine>());
            }
            damageLineList[i].SetActive(true);
            damageLineList[i].SetDamage(damages[i]);
        }
        for (int i = damages.Count; i < damageLineList.Count; i++)
        {
            damageLineList[i].SetActive(false);
        }
        posTween.Play(_onComplete);
    }
}
Main/System/Battle/UIComp/DamageContent.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 942dffc0f5354064485a6012dbb1db96
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Battle/UIComp/DamageLine.cs
New file
@@ -0,0 +1,23 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DamageLine : MonoBehaviour
{
    public TextEx damageTypeLabel;
    public TextEx damageValueLabel;
    public void SetDamage(DamageType damageType, int damage)
    {
        damageTypeLabel.SetActive(true);
        damageValueLabel.text = damage.ToString();
    }
    public void SetDamage(int damage)
    {
        damageTypeLabel.SetActive(false);
        damageValueLabel.text = damage.ToString();
    }
}
Main/System/Battle/UIComp/DamageLine.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 69c7e3c9c17e56542b39f18f4c17d43e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: