[C# / Unity 를 이용한 게임 만들기] 고양이의 구름등반 3탄! (버그발견과 해결)

Patrick!·2023년 7월 8일
0
post-thumbnail

1. 만든 게임에 버그가 발생했다고 한다!!

지난 시간에는 고양이가 구름을 등반하여 깃발에 도착하는 것과 화면전환까지 마쳐서 게임을 다 만든 줄 알았다... 하지만 치명적인 버그가 발생하고 있었다는 것을 알았다.
[C# / Unity 를 이용한 게임 만들기] 고양이의 구름등반 2탄!

- 버그의 종류
a. 점프하는 도중에도 계속 점프할 수 있다.
b. 플레이어가 화면 밖으로 나가도 끝없이 떨어진다.

2. 버그 - a 를 해결하자.

점프 중에 점프가 가능한 상황이다... 무한으로 점프를 해서 도착지점까지 이동하는게 가능하다.

하지만 이렇게 하면 구름을 구현한 의미가 없어지게 된다..

현재 PlayerController 스크립트에서 Spacebar를 누르면 위쪽 방향의 힘을 가하기 때문에 몇 번이고 더 점프할 수 있는 상황이다. 이를 막으려변 플레이어가 점프중인지 감지해서 점프 중일때는 힘이 미치지 않도록 해야한다.

그럼 이를 어떻게 접근해야 하는가?

플레이어가 점프 중인지 아는 방법은

  • '구름과 닿았는지를 보는 방법'
  • 'Y축 방향의 속도를 보는 방법'
  • '플레이어 상태를 스테이트 머신으로 관리하는 방법'

다음과 같은 방법들이 존재한다. 여기서는 'Y축 방향의 속도가 0(정지하고 있다) 일 때만 점프한다'를 구현하도록 해보자!

<기존코드>

if (Input.GetKeyDown(KeyCode.Space)) // 스페이스바가 입력된 것만 인식한다.
        {
            this.rigi2D.AddForce(transform.up * this.jumpForce);
        }

<변경 후 코드>
'Y축 방향의 속도가 0(정지하고 있다) 일 때만 점프한다' 에서 Y축 방향의 속도가 0 일때! 를 조건에 넣으면 된다.

if (Input.GetKeyDown(KeyCode.Space) && this.rigid2D.velocity.y == 0)
        {
            this.rigi2D.AddForce(transform.up * this.jumpForce);
        }

PlayerController의 점프 조건문에 추가한 부분을 보면
플레이어 속도는 Rigidbody2D 클래스의 velocity 변수로 추출할 수 있다! (*매우중요)

** 이제 Spacebar가 눌려도 Y축 방향 속도가 0일때만 위쪽 방향으로 힘이 가해집니다. (버그해결!)


3. 버그 - b 를 해결하자.

플레이어가 화면 밖으로 나가도 끝없이 떨어집니다. 이것을 막으려면 플레이어의 Y 좌표가 -10 미만이면 씬의 처음으로 돌아가도록 만들겁니다. 씬의 처음으로 돌아가려면 PlayerController 의 Update 메서드의 스크립트를 수정해야합니다.

<추가한 코드>

if (transform.position.y < -10) {
        SceneManeger.LoadScene("GameScene");
}

이 스크립트에서는 플레이어의 Y좌표가 -10 미만이면 현재 씬인 GameScene을 로드합니다.
이처럼 LoadScene 메서드를 사용해 현재 씬을 로드하면 시작 지점으로 돌아갈 수도 있다!(*매우중요)


최종적으로 만들어진 고양이 게임의 버그또한 해결하는 시간을 가졌다.

2D 게임을 만드는 일에는 언제나 좌표와 관련하여 해결할 수 있는 방법이 있다는 것을 깨닫게 된 시간이었다.


출처 : 그림으로 이해하고 만들면서 익히는 유니티 교과서[개정5판] - 기타무라 마나미

profile
C++와 Unreal Engine / C#과 Unity / Katalon Studio를 통한 자동화 테스트 등을 하루하루 공부한 기록

0개의 댓글