using Cysharp.Threading.Tasks; using DG.Tweening; using Stary.Evo; using UnityEngine; namespace Main { /// /// 用户未靠近时,“请跟我来”手势 /// 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 param) { KKFsmSystem kkFsmSystem = FsmSystem as KKFsmSystem; Transform NextPoint = param as Transform; if (NextPoint != null) { // 获取主摄像机并计算相对位置 var camera = Camera.main.transform; Vector3 viewportPos = camera.GetComponent().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); }); } } } }