|
@@ -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);
|
|
|
}
|
|
|
|
|
|
//相机跟随主角
|