CoinWarrior 게임 개발 1일차

mingu Lee·2025년 2월 11일

Unity2D - CoinWarrior

목록 보기
1/5

오늘부터 2D Platformer 게임을 하나 만들어보기로 했다.

단순하게 적과 장애물을 피하며 동전을 최대한 많이 먹는 것이 목표인 게임이고, 이름은 'CoinWarrior'라고 지었다.

일단 게임 제작에 앞서 사용할만한 Asset Store를 찾아봤는데, 하나의 Asset 안에 모든 Object가 마음에 드는 것이 없어서 마음에 드는 배경, 캐릭터, 적 등의 여러 Asset을 섞어서 사용하기로 결정했다.

오늘 진행한 부분은 아래와 같다.

  1. 움직이는 배경화면 제작
  2. 캐릭터 애니메이션 설정
  3. 캐릭터 컨트롤러 제작

움직이는 배경화면


캐릭터는 계속 앞으로 달려가고 앞에서 오는 동전, 장애물, 적 등을 처리하는 컨셉의 게임이기 때문에 배경이 움직일 필요가 있었다.

다운받은 배경화면 Asset이 여러 개의 Layer로 나뉘어져 있어서 각 Layer별로 움직이는 속도를 다르게 해주어 배경에 좀 더 입체감과 깊이감을 주었다.

총 6개의 Layer가 있는데 맨 뒤에 큰 배경은 고정시켜두고 나머지 5개를 각기 다른 속도로 지정해주었다.

처음에 이 움직이는 배경을 만들 때 똑같은 배경 Object 2개를 만들어서 가로로 배치해놓고 왼쪽으로 움직이면서 화면에서 벗어나면 transform을 변경시켜주는 방향으로 코드를 작성했다.

단순하게 화면 왼쪽으로 벗어나면 현재 transformsprite의 가로 길이 * 2만큼 더해줘서 다시 오른쪽으로 배치하여 배경화면이 반복되게 하려고 했었다.

근데 위 방식대로 코드를 작성하니까 미세하게 이어지지 않는 부분이 발생해서 신경이 거슬렸다.

transform에 값을 더하는 과정에서 뭔가 오차가 발생한 것 같은데.. 배경을 조금 겹쳐서 이동하게 하자니 뭔가 이질감이 들고, 딱 맞춰보려고 해도 자꾸 세로 선이 보이고 해서 구글에 방법을 찾아봤다.

찾아보니 Mathf.Repeat()라는 함수를 사용하면 실수오차도 줄이고 해결할 수 있다고해서 한 번 사용해봤다.

Mathf.Repeat(a, b)는 0 ~ b 사이의 값을 a 간격으로해서 반복하여 return 해주는 함수란다.

쨌든, 위 함수를 사용해서 아래와 같이 코드를 작성해봤다.

처음 position에서 점점 왼쪽으로 가다가 width 값이 넘어갈 경우 다시 0으로 초기화돼서 원점으로 돌아온다.

대충 위 사진같은 느낌이다.

자세한 과정은 구글에 검색해보기를 바란다.

위 영상이 결과물.

캐릭터 애니메이션


캐릭터 Asset에 달리기, 공격, 점프 등 다양한 모습의 Sprite가 존재했다.

일단은 간단하게 달리기, 점프, 슬라이드 애니메이션을 추가하여 각 행동에 맞는 애니메이션을 제작하였다.

이후 Animator에서 각 상태 간에 특정 조건을 만족하면 다른 상태로 전환되어 애니메이션이 바뀌도록 해주었다.

위 사진으로 예를 들자면, Run 상태에서 isGround라는 변수 값이 false면 Jump 상태로 변경되게 했다.

또한, 각 애니메이션에 알맞게 충돌 범위도 재설정 해주었다.

위 값들을 저장하여 각 상태가 전환될 때, Collider 범위도 변경되게 해주었다.

캐릭터 컨트롤러


캐릭터가 스페이스바를 눌렀을 때, AddForce() 함수를 사용해서 위쪽으로 힘을 주어 점프하게 만들었다.

슬라이딩은 왼쪽 Shift를 눌렀을 때 발동되게 했으며, 슬라이딩 시간을 고정시켜서 현재 시각 - 슬라이딩을 시작한 시각 >= 슬라이딩 시간을 만족하면 슬라이딩이 종료되게 했다.

캐릭터가 직접 좌, 우로 이동하는 것이 아니라 배경이 움직이면서 캐릭터가 앞으로 전진하고 있다는 느낌을 주는 것이기 때문에 캐릭터 컨트롤러 작성은 간단했다.

오늘의 결과물


다음 시간에는 동전과 장애물을 만들어야겠다.

profile
Github: https://github.com/dlalsrn

0개의 댓글