Browse Source

增加用镜头动画展示战场切换

大爷 1 year ago
parent
commit
bf17bc89d1

+ 9 - 1
Unity/Assets/Scripts/Codes/Hotfix/Client/battle/BattleMgr.cs

@@ -24,6 +24,9 @@ namespace ET
         private static CommonLang.Geometry.Vector3 vecTemp = new();
         private HashMap<int, BattleUnit> UnitTemplateIdHash = new();
 
+        private int mapHeight;
+        public int MapHeight { get { return mapHeight; } }
+
         public void Awake()
         {
             eventHandler = new();
@@ -67,7 +70,7 @@ namespace ET
             {
                 if(Input.GetKeyDown((KeyCode)i))
                 {
-                    EventSystem.Instance.Publish(BattleFunc.Static.Clone((int)i));
+                    EventSystem.Instance.Publish(BattleFunc.Clone((int)i));
                 }
             }
         }
@@ -114,6 +117,7 @@ namespace ET
         protected void LayerEvent_Init(CommonAI.ZoneClient.ZoneLayer layer)
         {
             Log.Debug($"OnLayerInit- scene template ID:{layer.Data.ID}");
+            mapHeight = layer.Data.Terrain.ZoneData.TotalHeight;
         }
 
         //单位进入战斗  
@@ -358,6 +362,10 @@ namespace ET
                 {
                     EventSystem.Instance.Publish(ShowUIAnimation.Clone(ShowUIAnimation.AniType.LikeEnergy, 0));
                 }
+                else if(msg.StartsWith("Camera"))
+                {
+                    EventSystem.Instance.Publish(CameraPlaybleEvent.Clone(msg));
+                }
             });
             /*BubbleTalkEvent
             AddEffectEvent

+ 59 - 20
Unity/Assets/Scripts/Codes/HotfixView/Client/Camera/CameraMgr.cs

@@ -1,6 +1,7 @@
 using DG.Tweening;
 using ET.EventType;
 using FairyGUI;
+using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Playables;
 
@@ -9,41 +10,79 @@ namespace ET.Client
     public static class CameraMgr
     {
         public static Camera MainCamera { get; private set; }
+
+        private static Dictionary<string, UnityEngine.Object> Name_BindObj = new Dictionary<string, UnityEngine.Object>();
+        private static PlayableDirector Director;
+        private static readonly string StartPlayableName = "Camera02";
+        private static System.Action StopCallback = null;
+
         public static void Init()
         {
             MainCamera = Camera.main;
-            MainCamera.transform.SetPositionAndRotation(new Vector3(230, 35, -5), Quaternion.Euler(20, 0, 0));
+            MainCamera.transform.SetPositionAndRotation(new Vector3(90, 35, 26.6f), Quaternion.Euler(20, 20, 0));
             MainCamera.fieldOfView = 60;
+
+            Director = MainCamera.GetComponent<PlayableDirector>();
+            if (Director == null)
+            {
+                Log.Error("Not Found Camera PlayableDirector");
+                return;
+            }
+            if (Name_BindObj.Count == 0)
+            {
+                foreach (var bind in Director.playableAsset.outputs)
+                {
+                    var obj = Director.GetGenericBinding(bind.sourceObject);
+                    Name_BindObj.Add(bind.streamName, obj);
+                }
+            }
+
+            Director.stopped += (pd) =>
+            {
+                StopCallback?.Invoke();
+                StopCallback = null;
+            };
         }
 
         [Event]
-        public class SceneChangeFinishEvent : BEvent<SceneLoadFinish>
+        public class CameraPlaybleEventHandler : BEvent<CameraPlaybleEvent>
         {
-            protected override async ETTask OnEvent(SceneLoadFinish a)
+            protected override async ETTask OnEvent(CameraPlaybleEvent a)
             {
-                var playable = MainCamera.GetComponent<PlayableDirector>();
-                if (playable != null)
+                await PlayTimeline(a.Playable, () =>
                 {
-                    playable.Play();
-                    playable.stopped += (pd) =>
+                    if(a.Playable == "Camera1_2")
                     {
-                        var session = PlayerComponent.Instance.ClientScene().GetComponent<SessionComponent>().Session;
-                        session.Call(new C2G_BattleNotify() { Message = BattleNotify.ClientIsReady.ToString() }).Coroutine();
-
-                        EventSystem.Instance.Publish<ShowHUDEvent>();
+                        EventSystem.Instance.Publish(BattleFunc.Clone((int)BattleFunc.FUNC.Start2));
+                    }
+                    else if (a.Playable == "Camera2_3")
+                    {
+                        EventSystem.Instance.Publish(BattleFunc.Clone((int)BattleFunc.FUNC.Start3));
+                    }
+                });
+            }
+        }
 
-                        GameObject.Destroy(playable);
-                        var ani = MainCamera.GetComponent<Animator>();
-                        if(ani != null) GameObject.Destroy(ani);
-                    };
-                }
-                else
+        public static async ETTask PlayTimeline(string timeline, System.Action cb)
+        {
+            var task = await YooAssetProxy.LoadAssetAsync<PlayableAsset>($"Playable_{timeline}");
+            var asset = task.GetAssetObject<PlayableAsset>();
+            Director.playableAsset = asset;
+            foreach (var bind in asset.outputs)
+            {
+                if (Name_BindObj.TryGetValue(bind.streamName.ToString(), out var bindObj))
                 {
-                    Log.Error("Not Found Camera PlayableDirector");
-                    EventSystem.Instance.Publish<ShowHUDEvent>();
+                    Director.SetGenericBinding(bind.sourceObject, bindObj);
                 }
-                await ETTask.CompletedTask;
             }
+
+            StopCallback = cb;
+            Director.Play();
+        }
+
+        public static async ETTask PlayStartAnimation(System.Action cb)
+        {
+            await PlayTimeline(StartPlayableName, cb);
         }
 
         //相机跟随主角

+ 2 - 11
Unity/Assets/Scripts/Codes/HotfixView/Client/RenderUtils.cs

@@ -3,24 +3,15 @@ using UnityEngine;
 
 public static class RenderUtils
 {
-    public static int MapHeight
-    {
-        get
-        {
-            var layer = BattleMgr.Instance.Layer;
-            return layer == null ? 0 : layer.Data.Terrain.ZoneData.TotalHeight;
-        }
-    }
-
     private static UnityEngine.Vector3 vecTemp;
     public static UnityEngine.Vector3 UnityPosFromBattle(CommonLang.Geometry.Vector3 pos)
     {
-        vecTemp.Set(pos.X, pos.Z, MapHeight - pos.Y);
+        vecTemp.Set(pos.X, pos.Z, BattleMgr.Instance.MapHeight - pos.Y);
         return vecTemp;
     }
     public static UnityEngine.Vector3 UnityPosFromBattle(UnityEngine.Vector3 pos)
     {
-        vecTemp.Set(pos.x, pos.z, MapHeight - pos.y);
+        vecTemp.Set(pos.x, pos.z, BattleMgr.Instance.MapHeight - pos.y);
         return vecTemp;
     }
 

+ 1 - 1
Unity/Assets/Scripts/Codes/HotfixView/Client/Unit/OnNewZoneObject.cs

@@ -118,7 +118,7 @@ namespace ET.Client
         private async ETTask CreateHeadbar(UnitRenderComponet render, ZoneUnit zu)
         {
             var view = await GameObjectPool.Instance.AcquireHeadBar();
-            view.visible = true;
+            view.visible = false;
 
             render.HeadBar = view;
             var name = view.GetChild("text_name");

+ 2 - 0
Unity/Assets/Scripts/Codes/Model/Share/Const/ConstValue.cs

@@ -29,6 +29,8 @@
         //客户端消息转发
         ClientIsReady,
         StartRefreshMonster,
+        StartRefreshMonster2,
+        StartRefreshMonster3,
 
         //刷各种礼物事件
         TiktokGift_1,