포탈에서 특정 키 입력 시 지정된 장소로 이동하는 동작을 구현하고자 함.
현재는 키 입력 없이 특정 블록에 접촉 시 이동하는 것을 구현하였음.
특정 블록에 충돌 시 Player스크립트에 목표 지점과 상태를 저장해줌.
public void Warp(Transform warpTransform)
{
warpPos = warpTransform;
isWarp = true;
}
isWarp가 true가 되었을 때, 상태가 전환됨.
public override void Update()
{
base.Update();
if (player.isWarp)
{
stateMachine.ChangeState(stateMachine.WarpState);
return;
}
}
그 후 특정 조건에 따라 위치를 변경해주면 된다.
public override void Update()
{
time += Time.deltaTime;
//if (player.Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1)
if (time >=1f)
{
Debug.Log("Start");
if (warp)
{
player.gameObject.transform.position = player.warpPos.position;
warp = false;
}
}
if (time >= 2f)
{
Debug.Log("End");
stateMachine.ChangeState(stateMachine.IdleState);
}
}
현재는 애니메이션이 없어서 시간으로 대체하였다.
문제 원인 : 포탈로 이동한 위치가 저장되기 전에 상태가 변경되며 그 이전에 저장되었던 위치로 이동하는 것으로 보여짐. (WarpState에 들어가면 Move를 동작시키지 않음)
문제 해결 : 실제 애니메이션이 동작할 때처럼 실제 이동하는 구간과 상태가 변경되는 구간에 시간 차이를 두어 위치가 저장될 시간을 충분히 버는 것으로 해결함.