Files
plugin-library/Assets/Main/Script/Runtime/kkController/fsm/KKGuideState.cs
2025-05-23 18:26:47 +08:00

68 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cysharp.Threading.Tasks;
using DG.Tweening;
using Stary.Evo;
using UnityEngine;
namespace Main
{
/// <summary>
/// 用户未靠近时,“请跟我来”手势
/// </summary>
public class KKGuideState : AbstractFSMIState
{
private string aniGuideLeftName = "anim_ip_guide_inviteL";
private string aniGuideRightName = "anim_ip_guide_inviteR";
public KKGuideState(IFsmSystem system) : base(system)
{
}
public override UniTask OnEnterAsync()
{
return UniTask.CompletedTask;
}
public override UniTask OnExitAsync()
{
return UniTask.CompletedTask;
}
public override async UniTask OnEnterAsync<T>(T param)
{
KKFsmSystem kkFsmSystem = FsmSystem as KKFsmSystem;
Transform NextPoint = param as Transform;
if (NextPoint != null)
{
// 获取主摄像机并计算相对位置
var camera = Camera.main.transform;
Vector3 viewportPos = camera.GetComponent<Camera>().WorldToViewportPoint(NextPoint.position);
// 根据视口坐标判断左右视口X坐标<0.5为左侧,>=0.5为右侧)
if (viewportPos.x < 0.5f)
{
kkFsmSystem.animator.CrossFade(aniGuideLeftName,0.2f, 0, 0f);
}
else
{
kkFsmSystem.animator.CrossFade(aniGuideRightName,0.2f, 0, 0f);
}
float animProgress = 0;
while (animProgress <= 0.99f)
{
Debug.Log(animProgress);
animProgress=kkFsmSystem.GetAnimationProgress(0);
await UniTask.Yield();
}
kkFsmSystem.kk.transform.DOScale(Vector3.zero, 0.5f).OnComplete(() =>
{
kkFsmSystem.kk.transform.position = NextPoint.position;
kkFsmSystem.kk.transform.DOScale(Vector3.one, 0.5f);
FsmSystem.SetCurState(nameof(KKIdleState),(object)KKIdleStateParam.IsVoice);
});
}
}
}
}