프로젝트공부아이디어
    • 2월
    • 1월
  • 27

    26. 2. 27.

  • 26

    26. 2. 26.

  • 25

    26. 2. 25.

  • 24

    26. 2. 24.

  • 23

    26. 2. 23.

  • 22

    26. 2. 22.

  • 13

    26. 2. 13.

  • 10

    26. 2. 10.

  • 9

    26. 2. 9.

  • 6

    26. 2. 6.

  • 2

    26. 2. 2.

로딩 중...

9

2026. 2. 9.

물감옥 상태가 되면 이동이 안되던 버그

원인

GameLevel::Tick > ProcessExplosionCollision > player->OnDamaged() > 첫번째엔 TrappedInBubble() > 폭발범위가 1프레임 이상 지속되므로 다시 ProcessExplosionCollision 호출 > player->OnDamaged()(여기서 플레이어 상태를 추적해줘야함) > player->currentState == PlayerState::TRAPPED_IN_BUBBLE이므로 currentState == PlayterState::DEAD 실행됨 > Player::Tick에서 걸러져서 이동이 안됐던 것

ProcessExplosionCollision이 프레임마다 실행된다는 사실을 망각했음

물감옥에서 빠져나오면 이동속도가 튀던 이유

원인

float moveSpeed = 0.5f > moveProgress = 1.0f - (moveTimer.GetRemainingTime() / moveSpeed) moveProgress가 moveSpeed에 의존적인 값인데 isMoving 중에 moveSpeed가 바뀌면서 moveProgress가 재계산돼 이동속도가 튀었던 것

targetTime = 0.5초remaining = 0.3초moveSpeed = 0.5초에서 갑자기 0.125초로 바뀜moveProgress = 1.0 - (0.3 / 0.125) = 1.0 - 2.4 = -1.4eased = 1.0 - (1.0 - (-1.4)) * (1.0 - (-1.4)) = 1.0 - 5.86 = -4.86

moveSpeed를 클램프로 0과 1사이로 보장해줬고, 물감옥 상태에서 Timeout 직후에 isMoving을 false로 명시적으로 바꿔줌으로써 현재 이동 계산을 끊어줌

P@@@ 상황에서 @P@@가 돼버리는 버그

원인

GameLevel::CanMove에서 SetPosition을 수행하고 있었음 CanMove를 이름에 맞게 움직일 수 있는지 여부만 판별하도록 축소하고, 만약 밀 수 있는 오브젝트라면 Push 함수를 실행하게 처리. 미는 작업은 Push 함수가 담당

Push에 다다음칸 확인 조건문 추가해서 해결

-> 선형보간 처리 안되고 있는 것 같은데? moveSpeed, moveProgress는 정상 동작하고 있음(물감옥) -> 우선 효과없는 float eased 만 주석처리

물감옥 상태의 플레이어는 밀기 못함

'물감옥 상태의 플레이어'를 어떻게 정의함?

Push 조건문에 currentState == PlayerState::NORMAL 조건만 간단히 추가해서 해결

refactoring

  • PlayerState 바꾸는건 무조건 ChangeState으로
  • ChangeState에서 공통으로 처리할거 해주고 상태 바뀌었을 때 실행될 OnEnter상태()
  • 이후 Tick마다 상태에 맞는 로직 수행은 Update상태Tick()
  • 만약 Update상태Tick()에서 상태를 바꿔줘야한다면 ChangeState만 호출하면 됨
왼쪽 화살표0610오른쪽 화살표