using System.Collections; using System.Collections.Generic; using UnityEngine; using QFramework; using UnityEngine.Playables; using Sirenix.OdinInspector; using UnityEngine.UI; public class PrincipleGameLanuch : MonoBehaviour { public Button m_CloseBtn; [SerializeField] public List m_PrincipleInfos; public PlayableDirector m_PlayableDirector; [LabelText("单个直接播放(在只有一个的情况下使用)")] public bool singlePlaye; public bool isWaitOneFrame = true; private void Start() { ResKit.Init(); foreach (var principleInfo in m_PrincipleInfos) { if (principleInfo.btn != null) { principleInfo.btn.onClick.AddListener(() => OnBtnClick(principleInfo)); } } if (singlePlaye) { OnBtnClick(m_PrincipleInfos[0]); } if (m_CloseBtn != null) { m_CloseBtn.onClick.AddListener(() => Application.Quit()); } } private void OnBtnClick(PrincipleInfo principleInfo) { if (isWaitOneFrame) { StartCoroutine(WaitOneFrame(principleInfo)); } else { m_PlayableDirector.playableAsset = principleInfo.playableAsset; string tmpName = "原理/" + principleInfo.subTitleName; UIKit.OpenPanel(new SubTitlesPanelData() { m_SubTitleName = tmpName }); m_PlayableDirector.Play(); } } IEnumerator WaitOneFrame(PrincipleInfo principleInfo) { if (m_PlayableDirector != null) { // 停止播放 m_PlayableDirector.Pause(); // 重置时间到0 m_PlayableDirector.time = 0f; // 重新播放 m_PlayableDirector.Play(); } yield return new WaitForEndOfFrame(); m_PlayableDirector.playableAsset = principleInfo.playableAsset; string tmpName = "原理/" + principleInfo.subTitleName; UIKit.OpenPanel(new SubTitlesPanelData() { m_SubTitleName = tmpName }); m_PlayableDirector.Play(); } } [System.Serializable] public class PrincipleInfo { [LabelText("字幕名称")] public string subTitleName; [LabelText("playableClip")] public PlayableAsset playableAsset; [LabelText("绑定按钮")] public Button btn; }