瀏覽代碼

修改反馈表现

DESKTOP-FB72PO8\Administrator 4 月之前
父節點
當前提交
fe0b185eef
共有 22 個文件被更改,包括 1012 次插入164 次删除
  1. 5 0
      Assets/Art/BakedAssets/BakedAssets_GuaiwuBoss01/GuaiwuBoss01_Material_Snake Naga.mat
  2. 697 126
      Assets/GPUECSAnimationBaker/Samples/Shaders/GPUECSAnimator_URP_SimpleShader.shadergraph
  3. 4 0
      Assets/Scripts/Core/Event/Event/CustomEventType.cs
  4. 5 0
      Assets/Scripts/Core/Event/Event/EventDataBasic.cs
  5. 5 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/CombatEventType.cs
  6. 18 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/CombatHeroTargetAlterEventData.cs
  7. 3 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/CombatHeroTargetAlterEventData.cs.meta
  8. 10 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/HeroClickEventData.cs
  9. 3 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/HeroClickEventData.cs.meta
  10. 6 0
      Assets/Scripts/GameLogic/Combat/CombatEvent/ShowTextEventData.cs
  11. 39 4
      Assets/Scripts/GameLogic/Combat/CombatTool/CombatCameraControllder.cs
  12. 22 5
      Assets/Scripts/GameLogic/Combat/Hero/CombatAIBasic.cs
  13. 67 11
      Assets/Scripts/GameLogic/Combat/Hero/CombatHeroEntity.cs
  14. 21 0
      Assets/Scripts/GameLogic/Combat/Hero/CombatHeroGameObject.cs
  15. 1 1
      Assets/Scripts/GameLogic/Combat/Hero/HeroAanimtion/CombatHeroGPUAnimtion.cs
  16. 3 1
      Assets/Scripts/GameLogic/Combat/Hero/HeroGPU/HeroGPUMono.cs
  17. 15 3
      Assets/Scripts/GameLogic/Combat/Hero/HeroGPU/HeroGPURenderManager.cs
  18. 2 0
      Assets/Scripts/GameUI/UI/Combat/CombatShowTextPanel.cs
  19. 72 4
      Assets/Scripts/GameUI/UI/CombatHPPanel.cs
  20. 6 1
      Assets/Scripts/GameUI/UI/Hero/WidgetHero.cs
  21. 5 5
      Assets/Scripts/GameUI/UI/HeroHpWidget.cs
  22. 3 3
      UserSettings/EditorUserSettings.asset

+ 5 - 0
Assets/Art/BakedAssets/BakedAssets_GuaiwuBoss01/GuaiwuBoss01_Material_Snake Naga.mat

@@ -125,12 +125,17 @@ Material:
     - _UVSec: 0
     - _WorkflowMode: 1
     - _ZWrite: 1
+    - _edgeStrength: 1.89
+    - _injuriedStrength: 0
     m_Colors:
     - _BaseColor: {r: 1, g: 1, b: 1, a: 1}
     - _Color: {r: 1, g: 1, b: 1, a: 1}
     - _EmissionColor: {r: 1, g: 0, b: 0, a: 1}
     - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
+    - _edgeColor: {r: 0.9150943, g: 0, b: 0, a: 0}
+    - _injuriedColor: {r: 1, g: 1, b: 1, a: 0}
     - _mainColor: {r: 1, g: 1, b: 1, a: 1}
+    - _normalColor: {r: 0.764151, g: 0.32944304, b: 0.10453011, a: 0}
   m_BuildTextureStacks: []
 --- !u!114 &2310945979084451667
 MonoBehaviour:

文件差異過大導致無法顯示
+ 697 - 126
Assets/GPUECSAnimationBaker/Samples/Shaders/GPUECSAnimator_URP_SimpleShader.shadergraph


+ 4 - 0
Assets/Scripts/Core/Event/Event/CustomEventType.cs

@@ -20,5 +20,9 @@ namespace Fort23.Core
       /// 英雄升星
       /// </summary>
       HeroPromote,
+      /// <summary>
+      /// 点击到英雄的UI部件
+      /// </summary>
+      HeroClick,
     }
 }

+ 5 - 0
Assets/Scripts/Core/Event/Event/EventDataBasic.cs

@@ -52,7 +52,12 @@ namespace Core.Utility.Event
 
         public void Dispose()
         {
+            ProDispose();
             Recycle(this as T);
         }
+        protected virtual void ProDispose()
+        {
+           
+        }
     }
 }

+ 5 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/CombatEventType.cs

@@ -6,6 +6,7 @@
 
         HeroDie,
         HeroHpUpdate,
+        ClearHeroHp,
         HarmUpdate,
         RecoverUpdate,
         CameraShake,
@@ -14,6 +15,10 @@
         /// </summary>
         AlertTrigger,
         /// <summary>
+        /// 目标改变
+        /// </summary>
+        TargetAlter,
+        /// <summary>
         /// 使用技能
         /// </summary>
         UseSkill,

+ 18 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/CombatHeroTargetAlterEventData.cs

@@ -0,0 +1,18 @@
+using Core.Utility.Event;
+using GameLogic.Combat.Hero;
+
+namespace Common.Utility.CombatEvent
+{
+    public class CombatHeroTargetAlterEventData: EventDataBasic<CombatHeroTargetAlterEventData>
+    {
+      public CombatHeroEntity combatHeroEntity;
+      public IHero targetCombatHeroEntity;
+      public IHero lasetCombatHeroEntity;
+      protected override void ProDispose()
+      {
+          combatHeroEntity = null;
+          targetCombatHeroEntity = null;
+          lasetCombatHeroEntity = null;
+      }
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/CombatHeroTargetAlterEventData.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 921b026a7147496a81bf9804224db8a1
+timeCreated: 1732771927

+ 10 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/HeroClickEventData.cs

@@ -0,0 +1,10 @@
+using Core.Utility.Event;
+
+namespace Common.Utility.CombatEvent
+{
+    public class HeroClickEventData : EventDataBasic<HeroClickEventData>
+
+    {
+        public int heroId;
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/HeroClickEventData.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 4cbf8974ca864eb59d1feeba75d62a06
+timeCreated: 1732778608

+ 6 - 0
Assets/Scripts/GameLogic/Combat/CombatEvent/ShowTextEventData.cs

@@ -5,8 +5,14 @@ namespace Common.Utility.CombatEvent
 {
     public class ShowTextEventData : EventDataBasic<ShowTextEventData>
     {
+      
         public Vector3 worldPos;
         public string text;
         public Color Color;
+
+        protected override void ProDispose()
+        {
+          
+        }
     }
 }

+ 39 - 4
Assets/Scripts/GameLogic/Combat/CombatTool/CombatCameraControllder.cs

@@ -16,6 +16,8 @@ namespace GameLogic.Combat.CombatTool
 
         private bool isStartShake;
 
+        private int _followHeroId=-1;
+
         public void Init(CombatController combatController, Camera camera)
         {
             this.combatController = combatController;
@@ -23,9 +25,25 @@ namespace GameLogic.Combat.CombatTool
             root = Camera.transform.parent;
             StressReceiver = camera.transform.GetComponentInParent<StressReceiver>();
             TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this);
+            EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);
+            // EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);
         }
 
 
+        protected void HeroClick(IEventData eventData)
+        {
+            HeroClickEventData heroClickEventData = eventData as HeroClickEventData;
+            int heroId = heroClickEventData.heroId;
+            if (_followHeroId == heroId)
+            {
+                _followHeroId = -1;
+            }
+            else
+            {
+                _followHeroId = heroId;
+            }
+        }
+
         private void ShakeFinish()
         {
             isStartShake = false;
@@ -42,19 +60,36 @@ namespace GameLogic.Combat.CombatTool
                 }
 
                 Vector3 p = Vector3.zero;
-                for (int i = 0; i < combatHeroEntities.Length; i++)
+                if (_followHeroId != -1)
+                {
+                    for (int i = 0; i < combatHeroEntities.Length; i++)
+                    {
+                        if (combatHeroEntities[i].CurrCombatHeroInfo.modelID == _followHeroId)
+                        {
+                            p = combatHeroEntities[i].dotPos;
+                            break;
+                        }
+                    }
+                }
+                else
                 {
-                    p += combatHeroEntities[i].dotPos;
+                    for (int i = 0; i < combatHeroEntities.Length; i++)
+                    {
+                        p += combatHeroEntities[i].dotPos;
+                    }
+
+                    p /= combatHeroEntities.Length;
                 }
 
-                p /= combatHeroEntities.Length;
+
                 // Vector3 tp = root.TransformVector(new Vector3(0, 0, -20));
-                root.position = Vector3.Lerp(root.position, new Vector3(p.x, root.position.y,  p.z+13), 0.1f);
+                root.position = Vector3.Lerp(root.position, new Vector3(p.x, root.position.y, p.z + 13), 0.1f);
             }
         }
 
         public void Dispose()
         {
+            EventManager.Instance.RemoveEventListener(CustomEventType.HeroClick, HeroClick);
         }
 
         public void Shaking(CameraShakingSerializtion cameraShakingSerializtion)

+ 22 - 5
Assets/Scripts/GameLogic/Combat/Hero/CombatAIBasic.cs

@@ -26,8 +26,21 @@ public class CombatAIBasic : IDisposable
     /// <summary>
     /// 当前聚焦的目标
     /// </summary>
-    public IHero currFocusTarget;
+    public IHero currFocusTarget
+    {
+        get { return _currFocusTarget; }
+        set
+        {
+            CombatHeroTargetAlterEventData combatHeroTargetAlterEventData = CombatHeroTargetAlterEventData.Create();
+            combatHeroTargetAlterEventData.combatHeroEntity = _combatHeroEntity;
+            combatHeroTargetAlterEventData.targetCombatHeroEntity = value;
+            combatHeroTargetAlterEventData.lasetCombatHeroEntity = _currFocusTarget;
+            CombatEventManager.Instance.Dispatch(CombatEventType.TargetAlter, combatHeroTargetAlterEventData);
+            _currFocusTarget = value;
+        }
+    }
 
+    private IHero _currFocusTarget;
 
     private BetterList<GameObject> _areaList = new BetterList<GameObject>();
 
@@ -159,7 +172,8 @@ public class CombatAIBasic : IDisposable
         {
             CombatHeroEntity[] allHero =
                 CombatController.currActiveCombat.CombatHeroController.GetHero(!_combatHeroEntity.IsEnemy);
-            FindMinDixtance(allHero, out currFocusTarget);
+            IHero minDistanceHero = FindMinDixtance(allHero);
+            currFocusTarget = minDistanceHero;
             if (!_combatHeroEntity.IsEnemy && currFocusTarget == null)
             {
                 currFocusTarget = CombatController.currActiveCombat.CombatTypeBasic.currBannerHero;
@@ -192,12 +206,12 @@ public class CombatAIBasic : IDisposable
     {
     }
 
-    protected void FindMinDixtance(CombatHeroEntity[] allHero, out IHero minDistanceHero)
+    protected IHero FindMinDixtance(CombatHeroEntity[] allHero)
     {
-        minDistanceHero = null;
+        IHero minDistanceHero = null;
         if (allHero == null)
         {
-            return;
+            return null;
         }
 
         float minDistance = float.MaxValue;
@@ -220,6 +234,9 @@ public class CombatAIBasic : IDisposable
                 }
             }
         }
+
+        return minDistanceHero;
+        
     }
 
     public void Dispose()

+ 67 - 11
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroEntity.cs

@@ -7,6 +7,7 @@ using Fort23.Core;
 using Fort23.UTool;
 using GameLogic.Combat.CombatTool;
 using GameLogic.Combat.Hero;
+using GameLogic.Combat.Hero.HeroGPU;
 using UnityEngine;
 using UnityEngine.AI;
 using UnityEngine.Rendering;
@@ -18,6 +19,7 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
     /// 死亡时的节点ID
     /// </summary>
     public int heroDieNodeId;
+
     public bool IsEnemy { get; set; }
     public bool isDie { get; set; }
     public int number;
@@ -31,6 +33,12 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
 
     public bool isFollowState;
     public BetterList<CombatParticleSystemPool> heroLoopParticle = new BetterList<CombatParticleSystemPool>();
+    private float _lasetShowHarmTime;
+
+
+    private float _injuriedShowTime;
+    private bool _isAddinjuriedShow;
+    private float _addInjuiedValue = (1.0f / 0.2f) *1f;
 
     public Vector3 dotPos
     {
@@ -62,6 +70,8 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
             modelName += "_gpu";
         }
 
+        CurrCombatHeroInfo = combatHeroInfo.Copy();
+        MaxCombatHeroInfo = combatHeroInfo.Copy();
         // GameTimeLineParticleFactory
         GameObjectPool poolInterface =
             await GObjectPool.Instance.FetchAsync<GameObjectPool>(modelName + ".prefab", null);
@@ -75,15 +85,16 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
         AssetHandle assetHandle =
             await AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(combatHeroInfo.modelName + "_TD.txt");
         TextAsset textAsset = assetHandle.AssetObject<TextAsset>();
+        combatHeroGameObject = new CombatHeroGameObject();
+        combatHeroGameObject.Init(this, poolInterface);
 
         TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);
         timeLienData.DeserializeData();
         assetHandle.Release();
         combatHeroTimeLineControl = new CombatHeroTimeLineControl();
-        combatHeroTimeLineControl.Init(this,timeLienData);
+        combatHeroTimeLineControl.Init(this, timeLienData);
+
 
-        combatHeroGameObject = new CombatHeroGameObject();
-        combatHeroGameObject.Init(this, poolInterface);
         NavMeshAgent navMeshAgent = poolInterface.own.GetComponent<NavMeshAgent>();
         if (combatAIBasic == null)
         {
@@ -100,8 +111,6 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
         CombatAIBasic = combatAIBasic;
         CombatAIBasic.Init(this, navMeshAgent);
 
-        CurrCombatHeroInfo = combatHeroInfo.Copy();
-        MaxCombatHeroInfo = combatHeroInfo.Copy();
 
         CombatHeroSkillControl = new CombatHeroSkillControl();
         CombatHeroSkillControl.Init(this);
@@ -119,9 +128,13 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
 
         combatHeroAnimtion.Init(this);
         CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);
-        CreateHeroHpEventData createHeroHpEventData = CreateHeroHpEventData.Create();
-        createHeroHpEventData.combatHeroEntity = this;
-        EventManager.Instance.Dispatch(CustomEventType.CreateHeroHp, createHeroHpEventData);
+        if (!IsEnemy)
+        {
+            CreateHeroHpEventData createHeroHpEventData = CreateHeroHpEventData.Create();
+            createHeroHpEventData.combatHeroEntity = this;
+            EventManager.Instance.Dispatch(CustomEventType.CreateHeroHp, createHeroHpEventData);
+        }
+
         poolInterface.own.SetActive(true);
         callBack?.Invoke(this);
 #endif
@@ -135,6 +148,29 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
         CombatHeroSkillControl.Update(t);
         combatHeroTimeLineControl.Update(t);
         combatHeroAnimtion.Update(t);
+        if (combatHeroGameObject.HeroGPUMono != null)
+        {
+            if (_injuriedShowTime > 0)
+            {
+                _injuriedShowTime -= t;
+                if (_isAddinjuriedShow)
+                {
+                    combatHeroGameObject.HeroGPUMono.injuriedStrength += t * (_addInjuiedValue);
+                    if (combatHeroGameObject.HeroGPUMono.injuriedStrength >= 1f)
+                    {
+                        _isAddinjuriedShow = false;
+                    }
+                }
+                else
+                {
+                    combatHeroGameObject.HeroGPUMono.injuriedStrength -= t * (_addInjuiedValue);
+                }
+            }
+            else
+            {
+                combatHeroGameObject.HeroGPUMono.injuriedStrength = 0;
+            }
+        }
     }
 
     public T This<T>()
@@ -167,6 +203,7 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
     {
         return CombatHeroSkillControl.NormalAttSpeedScale;
     }
+
     public void HeroResurrection()
     {
         isDie = false;
@@ -175,6 +212,7 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
         heroHpUpdateEventData.combatHeroEntity = this;
         CombatEventManager.Instance.Dispatch(CombatEventType.HeroHpUpdate, heroHpUpdateEventData);
     }
+
     public void HeroDie(HarmReturnInfo harmReturnInfo)
     {
         heroDieNodeId = CombatController.currActiveCombat.CombatTypeBasic.allWinNodeCount;
@@ -191,9 +229,13 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
     public void HeroHurt(HarmReturnInfo harmReturnInfo)
     {
         CurrCombatHeroInfo.hp -= harmReturnInfo.att;
-        HarmUpdateEventData harmUpdateEventData = HarmUpdateEventData.Create();
-        harmUpdateEventData.HarmReturnInfo = harmReturnInfo;
-        CombatEventManager.Instance.Dispatch(CombatEventType.HarmUpdate, harmUpdateEventData);
+        UpdateHarmText(harmReturnInfo);
+        if (combatHeroGameObject.HeroGPUMono != null)
+        {
+            _injuriedShowTime = 0.4f;
+            combatHeroGameObject.HeroGPUMono.injuriedStrength = 0;
+            _isAddinjuriedShow = true;
+        }
 
         HeroHpUpdateEventData heroHpUpdateEventData = HeroHpUpdateEventData.Create();
         heroHpUpdateEventData.combatHeroEntity = this;
@@ -204,6 +246,20 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
         }
     }
 
+    private void UpdateHarmText(HarmReturnInfo harmReturnInfo)
+    {
+        float currTime = Time.time;
+        if (currTime - _lasetShowHarmTime < 0.1f)
+        {
+            return;
+        }
+
+        _lasetShowHarmTime = currTime;
+        HarmUpdateEventData harmUpdateEventData = HarmUpdateEventData.Create();
+        harmUpdateEventData.HarmReturnInfo = harmReturnInfo;
+        CombatEventManager.Instance.Dispatch(CombatEventType.HarmUpdate, harmUpdateEventData);
+    }
+
     public void Recover(HarmReturnInfo harmReturnInfo)
     {
         CurrCombatHeroInfo.hp += harmReturnInfo.att;

+ 21 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroGameObject.cs

@@ -5,6 +5,7 @@ using Core.Triiger;
 using Fort23.UTool;
 using GameLogic.Combat.CombatTool;
 using GameLogic.Combat.Hero;
+using GameLogic.Combat.Hero.HeroGPU;
 using GameTimeLine.CustomizeTimeLogic;
 using UnityEngine;
 using Utility;
@@ -13,6 +14,7 @@ using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
 public class CombatHeroGameObject : IDisposable
 {
     public GameObjectPool GameObjectPool;
+    public HeroGPUMono HeroGPUMono;
 
     public Transform transform
     {
@@ -50,6 +52,25 @@ public class CombatHeroGameObject : IDisposable
             hpTransform = GameObjectPool.own.transform;
         }
 
+        HeroGPUMono = GameObjectPool.own.GetComponent<HeroGPUMono>();
+        if (HeroGPUMono != null)
+        {
+            if (_combatHeroEntity.CurrCombatHeroInfo.heroType == 3)
+            {
+                HeroGPUMono.edgeStength = 3;
+                HeroGPUMono.edgecolor = new Color(0.8f, 0.44f, 0.02f);
+            }
+            else if (_combatHeroEntity.CurrCombatHeroInfo.heroType == 4)
+            {
+                HeroGPUMono.edgeStength = 3;
+                HeroGPUMono.edgecolor = new Color(0.8f, 0.16f, 0f);
+            }
+            else
+            {
+                HeroGPUMono.edgeStength = 0;
+            }
+        }
+
         GameObjectPool = gameObjectPool;
         HitPointMono hitPointMonos = GameObjectPool.own.GetComponentInChildren<HitPointMono>(true);
         HitPointMono hitPointMono = hitPointMonos;

+ 1 - 1
Assets/Scripts/GameLogic/Combat/Hero/HeroAanimtion/CombatHeroGPUAnimtion.cs

@@ -19,7 +19,7 @@ namespace GameLogic.Combat.Hero
             GPUAnimtion = new GPUAnimtion();
             GPUAnimtion.Init(GpuEcsAnimatorBehaviour);
             _heroPlayStateInfoBasic = new HeroGPUAnimtionStateInfo();
-            _heroGPUMono = combatHeroEntity.GameObject.GetComponent<HeroGPUMono>();
+            _heroGPUMono = combatHeroEntity.combatHeroGameObject.HeroGPUMono;
         }
 
         protected override void ProUpdate(float t)

+ 3 - 1
Assets/Scripts/GameLogic/Combat/Hero/HeroGPU/HeroGPUMono.cs

@@ -13,7 +13,9 @@ namespace GameLogic.Combat.Hero.HeroGPU
 
         public Transform rootTrans;
         public float4x4 animtionState= float4x4.identity;
-        
+        public Color edgecolor;
+        public float edgeStength;
+        public float injuriedStrength;
         private void OnEnable()
         {
             HeroGPURenderManager.Instance.AddHeroGpuRender(this);

+ 15 - 3
Assets/Scripts/GameLogic/Combat/Hero/HeroGPU/HeroGPURenderManager.cs

@@ -7,8 +7,11 @@ namespace GameLogic.Combat.Hero.HeroGPU
     {
         protected Map<string, BetterList<HeroGPUMono>> gpuRenderMap = new Map<string, BetterList<HeroGPUMono>>();
 
-        int enableShaderId = Shader.PropertyToID("_EnableAnimation");
-        int animtionStateId = Shader.PropertyToID("_AnimationState");
+        readonly int enableShaderId = Shader.PropertyToID("_EnableAnimation");
+        readonly int animtionStateId = Shader.PropertyToID("_AnimationState");
+        readonly int edgeColor = Shader.PropertyToID("_edgeColor");
+        readonly int edgeStrength = Shader.PropertyToID("_edgeStrength");
+        readonly int injuriedStrength = Shader.PropertyToID("_injuriedStrength");
 
         public HeroGPURenderManager()
         {
@@ -50,21 +53,30 @@ namespace GameLogic.Combat.Hero.HeroGPU
                 MaterialPropertyBlock _materialPropertyBlock = new MaterialPropertyBlock();
                 RenderParams rp = new RenderParams(gpuRenderMap.Value[0].Material);
                 rp.matProps = _materialPropertyBlock;
-                rp.shadowCastingMode= UnityEngine.Rendering.ShadowCastingMode.On;
+                rp.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
                 rp.receiveShadows = false;
                 Matrix4x4[] instData = new Matrix4x4[count];
                 Matrix4x4[] animtionStata = new Matrix4x4[count];
                 float[] enableAnimations = new float[count];
+                Vector4[] edgeColor = new Vector4[count];
+                float[] edgeStrength = new float[count];
+                float[] injuriedStrength = new float[count];
                 for (int i = 0; i < count; i++)
                 {
                     HeroGPUMono heroGPUMono = gpuRenderMap.Value[i];
                     instData[i] = heroGPUMono.rootTrans.localToWorldMatrix;
                     animtionStata[i] = heroGPUMono.animtionState;
+                    edgeColor[i] = heroGPUMono.edgecolor;
+                    edgeStrength[i] = heroGPUMono.edgeStength;
+                    injuriedStrength[i] = heroGPUMono.injuriedStrength;
                     enableAnimations[i] = 1;
                 }
 
                 _materialPropertyBlock.SetFloatArray(enableShaderId, enableAnimations);
                 _materialPropertyBlock.SetMatrixArray(animtionStateId, animtionStata);
+                _materialPropertyBlock.SetVectorArray(this.edgeColor, edgeColor);
+                _materialPropertyBlock.SetFloatArray(this.edgeStrength, edgeStrength);
+                _materialPropertyBlock.SetFloatArray(this.injuriedStrength, injuriedStrength);
                 Graphics.RenderMeshInstanced(rp, gpuRenderMap.Value[0].Mesh, 0, instData);
             }
         }

+ 2 - 0
Assets/Scripts/GameUI/UI/Combat/CombatShowTextPanel.cs

@@ -2,6 +2,7 @@ using Common.Utility.CombatEvent;
 using Fort23.Core;
 using GameLogic.Combat.CombatTool;
 using UnityEngine;
+using Utility;
 
 namespace Fort23.Mono
 {
@@ -11,6 +12,7 @@ namespace Fort23.Mono
         public static Font huiFuFont;
         public static Font shangHai;
 
+     
         public static void  OpenCombatShowTextPanel(CTaskAwaitBuffer cTaskAwaitBuffer)
         {
             cTaskAwaitBuffer.AddTask(UIManager.Instance.LoadAndOpenPanel<CombatShowTextPanel>(null,UILayer.Middle));

+ 72 - 4
Assets/Scripts/GameUI/UI/CombatHPPanel.cs

@@ -1,14 +1,18 @@
 using Common.Utility.CombatEvent;
 using Fort23.Core;
+using GameLogic.Combat.Hero;
+using Utility;
 
 namespace Fort23.Mono
 {
     [UIBinding(prefab = "CombatHPPanel")]
     public partial class CombatHPPanel : UIPanel
     {
+        private Map<IHero, int> currTargetHeroHp = new Map<IHero, int>();
+
         public static async CTask OpenCombatHPPanel()
         {
-            await UIManager.Instance.LoadAndOpenPanel<CombatHPPanel>(null,UILayer.Bottom);
+            await UIManager.Instance.LoadAndOpenPanel<CombatHPPanel>(null, UILayer.Bottom);
         }
 
         private void Init()
@@ -18,10 +22,12 @@ namespace Fort23.Mono
         protected override void AddEvent()
         {
             EventManager.Instance.AddEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);
+            CombatEventManager.Instance.AddEventListener(CombatEventType.TargetAlter, TargetAlter);
         }
 
         protected override void DelEvent()
         {
+            CombatEventManager.Instance.RemoveEventListener(CombatEventType.TargetAlter, TargetAlter);
             EventManager.Instance.RemoveEventListener(CustomEventType.CreateHeroHp, CreateHeroHp);
         }
 
@@ -29,14 +35,76 @@ namespace Fort23.Mono
         {
         }
 
-        private async void CreateHeroHp(IEventData iEventData)
+        private async void TargetAlter(IEventData iEventData)
         {
-            CreateHeroHpEventData createHeroHpEventData = iEventData as CreateHeroHpEventData;
-            CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;
+            CombatHeroTargetAlterEventData combatHeroTargetAlterEventData =
+                iEventData as CombatHeroTargetAlterEventData;
+            if (combatHeroTargetAlterEventData.combatHeroEntity.IsEnemy)
+            {
+                return;
+            }
+
+            if (combatHeroTargetAlterEventData.targetCombatHeroEntity != null)
+            {
+                CombatHeroEntity t = combatHeroTargetAlterEventData.targetCombatHeroEntity as CombatHeroEntity;
+                if (t != null)
+                {
+                    if (!currTargetHeroHp.TryGetValue(combatHeroTargetAlterEventData.targetCombatHeroEntity,
+                            out int count))
+                    {
+                    }
+
+                    if (count <= 0)
+                    {
+                        CreateHpUI(t);
+                    }
+
+                    count++;
+                    currTargetHeroHp[t] = count;
+                }
+            }
+
+            if (combatHeroTargetAlterEventData.lasetCombatHeroEntity != null)
+            {
+                CombatHeroEntity t = combatHeroTargetAlterEventData.lasetCombatHeroEntity as CombatHeroEntity;
+                if (t != null)
+                {
+                    if (currTargetHeroHp.TryGetValue(combatHeroTargetAlterEventData.lasetCombatHeroEntity,
+                            out int count))
+                    {
+                        count--;
+                        if (count <= 0)
+                        {
+                            currTargetHeroHp.Remove(combatHeroTargetAlterEventData.lasetCombatHeroEntity);
+                            HeroHpUpdateEventData heroHpUpdateEventData = HeroHpUpdateEventData.Create();
+                            heroHpUpdateEventData.combatHeroEntity = t;
+                            CombatEventManager.Instance.Dispatch(CombatEventType.ClearHeroHp, heroHpUpdateEventData);
+                        }
+                        else
+                        {
+                            currTargetHeroHp[t] = count;
+                        }
+
+                       
+                    }
+                }
+            }
+        }
+
+        private async void CreateHpUI(CombatHeroEntity combatHeroEntity)
+        {
+            // CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;
             HeroHpWidget heroHpWidget =
                 await UIManager.Instance.CreateGComponentForObject<HeroHpWidget>(HeroHpWidget, null, transform,
                     isInstance: true);
             heroHpWidget.Init(combatHeroEntity);
         }
+
+        private async void CreateHeroHp(IEventData iEventData)
+        {
+            CreateHeroHpEventData createHeroHpEventData = iEventData as CreateHeroHpEventData;
+            CombatHeroEntity combatHeroEntity = createHeroHpEventData.combatHeroEntity;
+            CreateHpUI(combatHeroEntity);
+        }
     }
 }

+ 6 - 1
Assets/Scripts/GameUI/UI/Hero/WidgetHero.cs

@@ -1,4 +1,6 @@
 using System.Threading.Tasks;
+using Common.Utility.CombatEvent;
+using Fort23.Core;
 using Fort23.UTool;
 using GameLogic.Hero;
 using UnityEngine;
@@ -27,6 +29,9 @@ namespace Fort23.Mono
         private async void OnHeroClick()
         {
             LogTool.Log("点击英雄");
+            HeroClickEventData heroClickEventData = HeroClickEventData.Create();
+            heroClickEventData.heroId = heroInfo.modelID;
+            EventManager.Instance.Dispatch(CustomEventType.HeroClick, heroClickEventData);
             await OpenHeroDetailPanel();
         }
 
@@ -37,7 +42,7 @@ namespace Fort23.Mono
             // {
             //     heroDetailPanel = await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback);
             // }
-            HeroDetailPanel heroDetailPanel = await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback);
+            HeroDetailPanel heroDetailPanel = await UIManager.Instance.LoadAndOpenPanel<HeroDetailPanel>(Callback,UILayer.Top);
             heroDetailPanel.InitHeroDetailPanel(heroInfo);
         }
 

+ 5 - 5
Assets/Scripts/GameUI/UI/HeroHpWidget.cs

@@ -31,7 +31,7 @@ namespace Fort23.Mono
         public override void DormancyObj()
         {
             CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
-            CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroDie, HeroDie);
+            CombatEventManager.Instance.RemoveEventListener(CombatEventType.ClearHeroHp, ClearHeroHp);
             StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);
             base.DormancyObj();
         }
@@ -58,10 +58,10 @@ namespace Fort23.Mono
             hp.rectTransform.sizeDelta = new Vector2(v * 60, hp.rectTransform.sizeDelta.y);
         }
 
-        private void HeroDie(IEventData iEventData)
+        private void ClearHeroHp(IEventData iEventData)
         {
-            HeroDieEventData heroDieEventData = iEventData as HeroDieEventData;
-            if (heroDieEventData.combatHeroEntity == combatHeroEntity&&combatHeroEntity.IsEnemy)
+            HeroHpUpdateEventData heroHpUpdateEventData = iEventData as HeroHpUpdateEventData;
+            if (heroHpUpdateEventData.combatHeroEntity == combatHeroEntity)
             {
                 GObjectPool.Instance.Recycle(this);
             }
@@ -71,7 +71,7 @@ namespace Fort23.Mono
         {
             this.combatHeroEntity = combatHeroEntity;
             CombatEventManager.Instance.AddEventListener(CombatEventType.HeroHpUpdate, HeroHpUpdateEventData);
-            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroDie, HeroDie);
+            CombatEventManager.Instance.AddEventListener(CombatEventType.ClearHeroHp, ClearHeroHp);
             StaticUpdater.Instance.AddRenderUpdateCallBack(Update);
             hpTransform = combatHeroEntity.combatHeroGameObject.hpTransform;
 

+ 3 - 3
UserSettings/EditorUserSettings.asset

@@ -54,13 +54,13 @@ EditorUserSettings:
       value: 183b144645154b7802000a2b17364d11021e17246e72662b47695d73a2a07478a2a505e1e82d6f2f100cca3210371526d1051c05e22a040f2507f00b32f01c061ccb5a9f5ace1e10d81c50a48d5d91a3959694aa9ad8efd7c9f2afe0f1c0fcfdf6f8b6f2a5a6dacfb89debbfa1cbc9c3f5c3bac18e9c89c1bbdec2d6f2b992939996c59699c79ae8d182b7baad82aba0b0aea88398abdbf1dd8a8ea765ffc520262728fafcf8f6c28eb162945c71898d6167877a72a980809c9f71cecece859d579fd5f106dbdadb21de0dde237c686c76706641634c764f547c624a7e622d6628286620686f653d2b635a0204003e0805017509093043470e3643041c5d5b415c54450e1c424b420f6e4b634e636263696655641a1f273c0f083c1102ec362de62318e9ea25ab61ade8ed0ee30655b0b6b7b8176615
       flags: 0
     UnityEditor.ShaderGraph.Blackboard:
-      value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9af8ffaeffff8e85dd8390e3949c8899daa7
+      value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4bae445d41895ac825e0100ec20313c0d91cddccd3d0c7efcca9bd8e908fecb0f9cfddf1eff4e7a1b1eae482f0fdaee1e1928b86d888ed909c968797a7cf
       flags: 0
     UnityEditor.ShaderGraph.FloatingWindowsLayout2:
-      value: 181344140043005e1a220d3b1f364b524c0c5a27130c293326201334cee5322ca0bd30e8eb293a707b0fd0180b3d0a36fc0d3d04e649500d1002ee0b5dbd1d2c27c00ad113cb1e10e41f1addc80993b982988db381b2b4808789f4aaa0a3b9adb9b3a8c482a7eec9b0a0f0a5aecee8c2c7d9b2d08e9c9189ea9e93de81e0dbc9dc94dfcd9b9f9a8188dff4c3fac0f7f4c2f9f7c7c5f0cdfdc5c6d0f079f1f531343226ecece8e6d3ebef3fd22229d7df276a9b64
+      value: 181344140043005e1a220d3b1f364b524c0c5a27130c293326201334cee5322ca0bd30e8eb293a707b0fd0180b3d0a36fc0d3d04e649500d1002ee0b5dbd1d2c27c00ad113cb1e10e41f1addc80993b98d9884a69ae6d8f0d1cda9e8fbfefaf9f9dea3fdb9ade882f0f7b0e1e380cafbf2c3adc18e9cd285a2908b82ec869c8395949c9483d68a8d97ddbd90bf
       flags: 0
     UnityEditor.ShaderGraph.InspectorWindow:
-      value: 18135939215a0a5004000b0e15254b524c1119263f2d6a722016393ce1eb3d36e5d339f9a5602b2e2c07a37e0901373ae01e0008f707250d171df81a53a5485d41895ac825e0100ec20313c0d91cddccd3d0c7efcca9bd80908ff0a2a4a1bbaaa0a9f2a3f3f8aa93e6edf38e9ccbddc18390ac86d4849394ea829f83f291cb918384d28397d5888b89dcf2dff2c7f7f7c2f3f38b88
+      value: 18135939215a0a5004000b0e15254b524c1119263f2d6a722016393ce1eb3d36e5d339f9a5602b2e2c07a37e0901373ae01e0008f707250d171df81a53a5485d41895ac825e0100ec20313c0d91cddccd3d0c7efcca9bd80908fecb0f9cfddf1eff4e7a1b1eae482f0fcaee1e1928b86d888ed969b938797a7cf
       flags: 0
     vcSharedLogLevel:
       value: 0d5e400f0650

部分文件因文件數量過多而無法顯示