PrincipleGameLanuch.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using QFramework;
  5. using UnityEngine.Playables;
  6. using Sirenix.OdinInspector;
  7. using UnityEngine.UI;
  8. public class PrincipleGameLanuch : MonoBehaviour
  9. {
  10. public Button m_CloseBtn;
  11. [SerializeField]
  12. public List<PrincipleInfo> m_PrincipleInfos;
  13. public PlayableDirector m_PlayableDirector;
  14. [LabelText("单个直接播放(在只有一个的情况下使用)")]
  15. public bool singlePlaye;
  16. public bool isWaitOneFrame = true;
  17. [LabelText("字幕是否使用绝对时间")]
  18. [InfoBox("若字幕长时间运行出现字幕延迟问题,修改字幕使用绝对时间=true",InfoMessageType.Warning)]
  19. public bool isUseGlobalTimeBySubTitlesPanel = false;
  20. private void Start()
  21. {
  22. ResKit.Init();
  23. foreach (var principleInfo in m_PrincipleInfos)
  24. {
  25. if (principleInfo.btn != null)
  26. {
  27. principleInfo.btn.onClick.AddListener(() => OnBtnClick(principleInfo));
  28. }
  29. }
  30. if (singlePlaye)
  31. {
  32. OnBtnClick(m_PrincipleInfos[0]);
  33. }
  34. if (m_CloseBtn != null)
  35. {
  36. m_CloseBtn.onClick.AddListener(() => Application.Quit());
  37. }
  38. }
  39. private void OnBtnClick(PrincipleInfo principleInfo)
  40. {
  41. if (isWaitOneFrame)
  42. {
  43. StartCoroutine(WaitOneFrame(principleInfo));
  44. }
  45. else
  46. {
  47. m_PlayableDirector.playableAsset = principleInfo.playableAsset;
  48. string tmpName = "原理/" + principleInfo.subTitleName;
  49. UIKit.OpenPanel<SubTitlesPanel>(new SubTitlesPanelData() { m_SubTitleName = tmpName });
  50. SubTitlesPanel.useGlobalTime = isUseGlobalTimeBySubTitlesPanel;
  51. m_PlayableDirector.Play();
  52. }
  53. }
  54. IEnumerator WaitOneFrame(PrincipleInfo principleInfo)
  55. {
  56. if (m_PlayableDirector != null)
  57. {
  58. // 停止播放
  59. m_PlayableDirector.Pause();
  60. // 重置时间到0
  61. m_PlayableDirector.time = 0f;
  62. // 重新播放
  63. m_PlayableDirector.Play();
  64. }
  65. yield return new WaitForEndOfFrame();
  66. m_PlayableDirector.playableAsset = principleInfo.playableAsset;
  67. string tmpName = "原理/" + principleInfo.subTitleName;
  68. UIKit.OpenPanel<SubTitlesPanel>(new SubTitlesPanelData() { m_SubTitleName = tmpName });
  69. SubTitlesPanel.useGlobalTime = isUseGlobalTimeBySubTitlesPanel;
  70. m_PlayableDirector.Play();
  71. }
  72. }
  73. [System.Serializable]
  74. public class PrincipleInfo
  75. {
  76. [LabelText("字幕名称")]
  77. public string subTitleName;
  78. [LabelText("playableClip")]
  79. public PlayableAsset playableAsset;
  80. [LabelText("绑定按钮")]
  81. public Button btn;
  82. }