2D 픽셀 이미지를 유니티에 옮기면 픽셀이 보이지 않도록 자동으로 최적화 하게 된다.
Filter Mode를 Point (no filter)로 설정하고, Compression을 None으로 설정하여 압축을 하지 않도록 한다.
2D 픽셀은 반드시 Point 설정을 해줘야 한다.
Quad는 3D Object지만, 너비와 높이는 있어도 두께가 없다. (한 장의 종이)
또한 3D 공간에서는 Quad를 볼 수 없다.
이 Quad에 머티리얼을 적용하여 배경을 만들어볼 것이다.
배경은 Wrap Mode를 Repeat로 해준다.
이 이미지가 여러 번 반복되도록 만들기 위해서다.
머티리얼 폴더를 만들어서 Material을 하나 만든다. (Quad에 이미지를 드래그하면 자동으로 생긴다.)
Tiling의 X와 Y 값을 조정해서 이미지가 늘어나지 않고 적절하게 반복되도록 한다.
배경에 우선 순위를 두고자하면 Transform의 Z축을 조정한다.
Z축 값을 올릴수록 거리가 멀어지기에 맨 뒤의 배경을 100으로 설정했다.
2D View를 비활성화하면 모든 객체가 어떻게 보이는지 한 눈에 볼 수 있다.
Sky는 100, Buildings는 90, Platform은 80으로 설정했다.
자연스러운 배경을 위해 Main Camera의 Background를 변경한다.
Sky와 동일한 컬러를 스포이드를 이용해 변경했다.
Header와 Tooltip을 코드에 추가하여 Inspector 창에 스크립트에 대한 설명을 할 수 있다.
meshRenderer 변수를 만들고 Update 메서드에 코드를 작성한다.
meshRenderer를 통해 머티리얼의 오프셋 값을 변경할 수 있다.
Update 메서드는 무조건 프레임 단위로 실행되기에 속도가 너무 빨라진다. (118FPS라면 1초에 118번)
Time.deltaTime을 통해 초 단위로 실행되도록 한다. (1초에 한 번만 이동)
60 FPS:Time.deltaTime ≈ 1 / 60 = 0.01667초
이동 거리(한 프레임) = speed * Time.deltaTime = 5 * 0.01667 ≈ 0.08335
총 프레임 수 = 601초 동안 이동한 총 거리: 0.08335 * 60 ≈ 5.0001
100 FPS:Time.deltaTime ≈ 1 / 100 = 0.01초
이동 거리(한 프레임) = speed * Time.deltaTime = 5 * 0.01 = 0.05
총 프레임 수 = 1001초 동안 이동한 총 거리: 0.05 * 100 = 5.0
쉽게 말하면, 60 FPS는 프레임 간격이 길어 한 번에 많이 이동하고 100 FPS는 프레임 간격이 짧아 한 번에 적게 이동한다.
Scroll Speed를 Sky는 0.1, Buildings는 0.2, Platform은 0.8로 변경하여 원근감이 느껴지도록 했다.
PlayerRigidBody 변수를 만들고 Update 메서드에 코드를 작성한다.
Input.GetKeyDown을 통해 플레이어의 키보드 입력을 받을 수 있다.
플레이어의 Rigidbody에 Y축으로 Impulse(순간적인 힘)을 주어 점프하듯이 보이게 한다.
OnCollisionEnter2D를 이용하여 땅에 닿았는지 확인할 것이다.
Platform 태그의 오브젝트와 충돌하면 isGrounded 변수를 true로 만든다.
땅에 닿았을 때 (isGrounded가 true일 때)만 점프할 수 있도록 if문을 바꾼다.
플레이어가 키를 눌러 Y축으로 힘이 가해지면 isGrounded가 false가 되고, 중력에 의해 다시 내려와 땅에 닿으면 다시 isGrounded는 true가 되어 반복한다.
Run->Jump, Jump->Land는 Has Exit Time 체크 해제한다.
Has Exit Time은 애니메이션이 끝나면 바로 다음 애니메이션을 실행한다는 의미다.
Land->Run은 자동으로 돌아가야 하기에 체크해둔다.
Transition은 A 애니메이션이 90% 완성됐을 때 B를 시작하도록 만들 수 있다.
여기선 그걸 원하지 않으므로 0으로 했다.
Parameters를 int로 추가하여 State로 이름 지었다.
Run→Jump로 갈 때는 Equals 1, Jump→Land로 갈 때는 Equals 2로 추가했다.
Land→Run은 Has Exit Time 체크로 인해 자동으로 전환되니 파라미터가 필요 없다.
Edit → Project Settings → Time 에서 Time Scale을 0.1이나 0.5로 조정하여 느리게 볼 수 있다.
반대로 값을 늘리면 빠르게 만들 수도 있다.
PlayerAnimator 변수를 추가한다.
인스펙터에서 Animator를 드래그해주는 걸 잊으면 안된다.
Jump를 할 때 State가 1이 되도록 하고, 땅에 닿으면 2가 되도록 한다.
대부분의 이미지를 유니티가 알아서 컷팅하기 때문에 착지 장면에서 바닥이 뜨는 현상이 발생한다.
높이를 다른 이미지와 맞춰서 자연스럽게 전환되도록 한다.
출처: 김장 게임을 만들었다 😎 ㅋㅋ
'유니티' 카테고리의 다른 글
[유니티6] #4 픽셀 Run 게임 만들기 (하이 스코어, 배포) (0) | 2025.01.08 |
---|---|
[유니티6] #3 픽셀 Run 게임 만들기 (플레이어 생명, 게임 매니저) (0) | 2025.01.07 |
[유니티6] #2 픽셀 Run 게임 만들기 (장애물) (0) | 2025.01.06 |
[유니티] 초보자를 위한 플레이어 애니메이션 만드는 과정 (0) | 2024.07.17 |
[유니티] 초보자를 위한 기본적인 배경 만드는 과정 (1) | 2024.07.12 |