FM/Assets/Scripts/Runtime/UI/Logic/HomeUI.cs

158 lines
4.4 KiB
C#
Raw Normal View History

2025-06-17 09:31:12 +08:00
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.UI;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Video;
namespace HK
{
public class HomeUI : UIBase
{
[SerializeField] private RawImage rawVideo;
[SerializeField] private Button btnNext;
[SerializeField] private Button btnENG;
[SerializeField] private Button btnChin;
[SerializeField] private Button btnSetting;
[SerializeField] private Button btnClose;
[SerializeField] private List<string> videoClips;
VideoPlayer player;
2025-07-02 10:24:01 +08:00
bool isPlaying = false;
2025-06-17 09:31:12 +08:00
public override void OnInit()
{
base.OnInit();
#region AutoGen_Init
rawVideo = GetValue<RawImage>("rawVideo");
btnNext = GetValue<Button>("btnNext");
btnENG = GetValue<Button>("btnENG");
btnChin = GetValue<Button>("btnChin");
btnSetting = GetValue<Button>("btnSetting");
btnClose = GetValue<Button>("btnClose");
btnNext.onClick.AddListener(OnClickbtnNext);
btnENG.onClick.AddListener(OnClickbtnENG);
btnChin.onClick.AddListener(OnClickbtnChin);
btnSetting.onClick.AddListener(OnClickbtnSetting);
btnClose.onClick.AddListener(OnClickbtnClose);
#endregion
player = rawVideo.GetComponent<VideoPlayer>();
}
public override void OnOpen()
{
2025-07-02 10:24:01 +08:00
isPlaying = true;
2025-06-17 09:31:12 +08:00
StartCoroutine(LoopPlayVideo());
2025-07-02 10:24:01 +08:00
base.OnOpen();
2025-06-17 09:31:12 +08:00
}
public override void OnClose()
{
base.OnClose();
2025-07-02 10:24:01 +08:00
isPlaying = false;
StopAllCoroutines();
player.Stop();
2025-06-17 09:31:12 +08:00
}
IEnumerator LoopPlayVideo()
{
2025-07-02 10:24:01 +08:00
while (isPlaying)
2025-06-17 09:31:12 +08:00
{
foreach (var clip in videoClips)
{
var path = Path.Combine(Application.streamingAssetsPath, clip);
UnityWebRequest www = UnityWebRequest.Get(path);
yield return www.SendWebRequest();
if (!www.isDone)
{
Debug.LogError("Failed to load video: " + www.error);
}
player.url = path;
// player.url = Path.Combine(Environment.CurrentDirectory, clip);
player.Prepare();
// Wait until the video is prepared
while (!player.isPrepared)
{
yield return null;
}
player.Play();
// Wait until the video is done playing
while (player.isPlaying)
{
yield return null;
}
// Release memory
player.Stop();
Resources.UnloadUnusedAssets();
System.GC.Collect();
// Optional delay between clips
yield return new WaitForSeconds(1);
}
}
}
#region AutoGen_Method
private void OnClickbtnNext()
{
2025-07-02 10:24:01 +08:00
UIManager.Instance.ShowUIOnly(nameof(AgreementUI));
2025-06-17 09:31:12 +08:00
}
private void OnClickbtnENG()
{
LanguageManager.Instance.ChangeLanguageType(LanguageManager.LanguageType.English);
}
private void OnClickbtnChin()
{
LanguageManager.Instance.ChangeLanguageType(LanguageManager.LanguageType.Chinese);
}
private void OnClickbtnSetting()
{
2025-07-13 15:53:13 +08:00
UIManager.Instance.ShowUI(nameof(SettingUI));
2025-06-17 09:31:12 +08:00
}
private void OnClickbtnClose()
{
}
#endregion
public override void OnDispose()
{
base.OnDispose();
#region AutoGen_Dispose
btnNext.onClick.RemoveListener(OnClickbtnNext);
btnENG.onClick.RemoveListener(OnClickbtnENG);
btnChin.onClick.RemoveListener(OnClickbtnChin);
btnSetting.onClick.RemoveListener(OnClickbtnSetting);
btnClose.onClick.RemoveListener(OnClickbtnClose);
rawVideo = null;
btnNext = null;
btnENG = null;
btnChin = null;
btnSetting = null;
btnClose = null;
#endregion
}
}
}