68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
|
|
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);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|