zip压缩加载测试
This commit is contained in:
128
Assets/Main/Script/Runtime/kkController/fsm/KKTalkState.cs
Normal file
128
Assets/Main/Script/Runtime/kkController/fsm/KKTalkState.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Stary.Evo;
|
||||
using Stary.Evo.AudioCore;
|
||||
using Stary.Evo.TableTextConversion;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Main
|
||||
{
|
||||
/// <summary>
|
||||
/// 讲解状态
|
||||
/// </summary>
|
||||
public class KKTalkState : AbstractFSMIState
|
||||
{
|
||||
private string aniName = "anim_ip_explain_talk_loop";
|
||||
private string aniMouthName = "anim_ip_talk";
|
||||
|
||||
private CancellationTokenSource cts;
|
||||
|
||||
public KKTalkState(IFsmSystem system) : base(system)
|
||||
{
|
||||
}
|
||||
|
||||
public override UniTask OnEnterAsync()
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
public override UniTask OnExitAsync()
|
||||
{
|
||||
if (cts.IsCancellationRequested)
|
||||
{
|
||||
cts?.Cancel();
|
||||
cts?.Dispose();
|
||||
}
|
||||
|
||||
KKFsmSystem kkFsmSystem = FsmSystem as KKFsmSystem;
|
||||
if (kkFsmSystem != null)
|
||||
{
|
||||
// kkFsmSystem.CloseImage();
|
||||
// kkFsmSystem.CloseText();
|
||||
}
|
||||
|
||||
kkFsmSystem.animator.CrossFade("defaultState", 0.2f, 1, 0f);
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
public override async UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
|
||||
{
|
||||
if (cts != null && !cts.IsCancellationRequested)
|
||||
{
|
||||
cts?.Cancel();
|
||||
cts?.Dispose();
|
||||
cts = null;
|
||||
}
|
||||
|
||||
cts = new CancellationTokenSource();
|
||||
|
||||
KKFsmSystem kkFsmSystem = FsmSystem as KKFsmSystem;
|
||||
AudioClip clip = param1 as AudioClip;
|
||||
if (clip != null)
|
||||
{
|
||||
AudioCoreManager.PlayVoice(new AudioData()
|
||||
{
|
||||
clip = clip,
|
||||
delayOnCompleteTime = 1f,
|
||||
onComplete = async () =>
|
||||
{
|
||||
kkFsmSystem.CloseImage();
|
||||
|
||||
float animProgress = 0;
|
||||
while (animProgress <= 0.99f)
|
||||
{
|
||||
animProgress = kkFsmSystem.GetAnimationProgress(0);
|
||||
await UniTask.Yield();
|
||||
}
|
||||
|
||||
FsmSystem.SetCurState(nameof(KKIdleState), (object)KKIdleStateParam.NotVoice);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (kkFsmSystem.animator != null)
|
||||
{
|
||||
kkFsmSystem.animator.CrossFade(aniName, 0.2f, 0, 0f);
|
||||
kkFsmSystem.animator.CrossFade(aniMouthName, 0.2f, 1, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("UnityEvo:KKFsmSystem: animator is null");
|
||||
}
|
||||
|
||||
if (kkFsmSystem.image != null)
|
||||
{
|
||||
if (param2 != null && param2 is Sprite)
|
||||
{
|
||||
kkFsmSystem.image.sprite = param2 as Sprite;
|
||||
kkFsmSystem.image.SetNativeSize();
|
||||
kkFsmSystem.CloseText();
|
||||
kkFsmSystem.OpenImage();
|
||||
}
|
||||
}
|
||||
|
||||
if (kkFsmSystem.text != null)
|
||||
{
|
||||
if (param2 != null && param2 is List<UITableData.SubtitleInfo>)
|
||||
{
|
||||
kkFsmSystem.CloseImage();
|
||||
kkFsmSystem.OpenText();
|
||||
List<UITableData.SubtitleInfo> infos = param2 as List<UITableData.SubtitleInfo>;
|
||||
if (infos.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < infos.Count; i++)
|
||||
{
|
||||
kkFsmSystem.text.text = infos[i].subtitle;
|
||||
await UniTask.Delay(TimeSpan.FromSeconds(infos[i].end - infos[i].start),
|
||||
cancellationToken: cts.Token);
|
||||
}
|
||||
|
||||
kkFsmSystem.CloseText();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user