03/01 본캠프 #47

guno park·2024년 3월 1일
0

본캠프

목록 보기
47/77

팀 프로젝트 - Fez OnlyUp 만들기

포탈 구현하기 (진행 중)

포탈에서 특정 키 입력 시 지정된 장소로 이동하는 동작을 구현하고자 함.
현재는 키 입력 없이 특정 블록에 접촉 시 이동하는 것을 구현하였음.

구현 코드

특정 블록에 충돌 시 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);
        }            
    }

현재는 애니메이션이 없어서 시간으로 대체하였다.

트러블 슈팅

  1. 문제 현상 : 포탈 이동 후 곧바로 돌아옴.

문제 원인 : 포탈로 이동한 위치가 저장되기 전에 상태가 변경되며 그 이전에 저장되었던 위치로 이동하는 것으로 보여짐. (WarpState에 들어가면 Move를 동작시키지 않음)

문제 해결 : 실제 애니메이션이 동작할 때처럼 실제 이동하는 구간과 상태가 변경되는 구간에 시간 차이를 두어 위치가 저장될 시간을 충분히 버는 것으로 해결함.

0개의 댓글