[ 목차 ]
오늘은 유니티를 가지고 게임을 만드는 실습을 진행할 것이다!!
역시 게임 부트캠프여서 그런지 게임을 통해 익혀가는 느낌이 벌써부터 재밌다.
고등학생 땐 학교에서 잠만 자는 아이였는데..
부캠하면서 거의 잠도 안 자고 가아아아아끔 졸아버린다..
내 몸이 재밌어하니까 오래 버티는 게 아닐까 하는 생각 중
그렇다면 오늘도 파이팅 하면서 시작!
1. 무한 배경
드래곤 플라이트 게임을 만들기 실습을 시작할 것이다.
처음으로 무한 배경을 만드는 것이다.
이미지 Inspector에 보면 texture Type이 있을 것이다.
Default로 바꾸고 Apply를 누르면 변경이 된다.
배경 이미지를 적용할 공간을 만들어준다.
Hierarchy - 2D Object - Quad
Quad를 생성하고 Game 뷰에 꽉 차게 화면을 늘린다.
Material를 만들 폴더를 생성한다.
만든 폴더 안에 메테리얼을 생성한다.
Project - Create - Material
만들어준 Material의 Inspector에 가서 Shader를 Unlit/Texture로 변경한다.
그리고 배경으로 사용할 이미지를 네모칸에 넣어준다.
그렇다면 이렇게 Quad 화면에 알맞게 적용되는 것을 알 수 있다.
하지만 무한 배경은 이게 반복이 되어야 하는데
Y값을 내려보면 화면이 이상해지는 것을 알 수 있다.
일단 화면의 화질부터 개선해 줄 것이다.
이미지 Inspector에서
- Wrap Mode - Repeat
- Filter Mode - Point (no filter)
이렇게 하면 선명해진다.
이제 배경을 움직이게 할 스크립트를 작성한다.
using UnityEngine;
public class BackgroundRepeat : MonoBehaviour
{
//스크롤할 속도를 상수로 지정해 줍니다.
public float scrollSpeed = 1.2f;
//Quad의 Material 데이터를 받아올 객체를 선언합니다.
private Material thisMaterial;
void Start()
{
//객체가 생성될 때 최초 1회 호출되는 함수
//현재 객체의 Component들을 참조해 Renderer라는 컴포넌의 Material 정보
thisMaterial = GetComponent<Renderer>().material;
}
void Update()
{
//새롭게 지정해줄 Offset 객체를 선언한다.
Vector2 newOffset = thisMaterial.mainTextureOffset;
//Y부분에 현재 y값 속도에 프레임 보정해서 더해준다.
newOffset.Set(0, newOffset.y + (scrollSpeed * Time.deltaTime));
//최종적으로 offset값을 지정해준다.
thisMaterial.mainTextureOffset = newOffset;
}
}
배경 Quad에 스크립트를 붙여준다.
플레이 해보면 무한으로 스크롤 되는 배경을 볼 수 있다.
2. 사운드 추가
배경 사운드를 추가하는 방법이다.
Main Camera - Inspector - Add Component - Audio Source
Audio Resource안에 노래를 선택해 넣어준다.
3. Player 생성하기
플레이어를 Hierarchy에 배치해 본다.
Player 오브젝트의 Inspector 목록을 보면 Tag가 Untagged로 되어있을 것이다.
Tag를 Player로 변경!
Player Inspector에서 Add Component → Cicle Collider 2D를 선택한다
Cicle Collider 2D를 선택하게 되면 플레이어 중심으로 밝은 원이 생길 것이다.
이 범위를 Edit Collider를 눌러 조절하거나 수동으로 조절해 주면 된다.
Rigidbody 2D를 추가한다. (Rigidbody가 아니라 Rigidbody 2D이니 헷갈리지 말 것!!)
여기에서 중력(Gravity Scale)이 기본적으로 1로 적용되어 있다.
현재 이 게임에서는 중력이 받으면 플레이어가 맵 밖으로 멀어지기 때문에
중력을 0으로 바꿔준다.
이제 Player 스크립트를 만들어 플레이어가 움직일 수 있게 스크립트를 만들 것이다.
using UnityEngine;
public class Player : MonoBehaviour
{
//움직이는 속도를 정의
public float moveSpeed = 5.0f;
void Start()
{
}
void Update()
{
//지정한 Axis를 통해 키의 방향을 판단하고 속도와 프레임 판정을 곱해 이동량을 정한다.
float distanceX = Input.GetAxis("Horizontal") * Time.deltaTime *moveSpeed;
//이동량만큼 실제로 이동을 해주는 함수
transform.Translate(distanceX, 0, 0);
}
}
같은 코드이지만 함수를 활용하는 방안이다.
void Update()
{
moveControl();
}
void moveControl()
{
//지정한 Axis를 통해 키의 방향을 판단하고 속도와 프레임 판정을 곱해 이동량을 정한다.
float distanceX = Input.GetAxis("Horizontal") * Time.deltaTime * moveSpeed;
//이동량만큼 실제로 이동을 해주는 함수
transform.Translate(distanceX, 0, 0);
}
4. Wall 생성
플레이어가 화면 밖으로 나가지 못하도록 벽을 생성해 주는 것이다.
Hierarchy - 2D Object - Sprites - Square
2D Square 생성한다.
추가된 Square를 맵 밖의 왼쪽 가로 끝을 맞추고, 세로 끝도 맞춰준다.
(Tip. 모서리를 v 누르고 맞춰주면 끝에 착! 붙게 된다.)
이름도 Wall로 변경한다.
Wall 오브젝트에 Box Collider 2D 생성 (3D 아님!!!!)
이걸 생성하게 되면 플레이어가 Box Collider에 충돌하면서 화면 밖으로 넘어가지 못하게 한다.
충돌처리 중요한 조건! (2D 게임일 시에)
- 각오브젝트에 콜라이더 필요 2D
- 둘 중 하나는 Rigidbody2D가 있어야 함. 물리를 담당하는 것
만들어뒀던 Wall을 복사해 (ctrl + D) 오른쪽 벽을 만들어준다.
작업을 할 때 흰색 Wall이 불편할 수 있다.
Wall Inspector에서 Sprite Renderer의 체크박스를 해제하면
콜라이더 기능은 그대로이지만, Wall의 모습이 안 보이게 된다.
옛날 추억의 게임 드래곤 플라이트의 게임을 재현해 보는 첫 번째 실습을 시작하였다.
유니티로 넘어오니까 확실히 더욱 재밌는데,
왔다 갔다 어디 있었지 하는 기억..
복잡해지면 나도 머리가 복잡해지는 미묘한 유니티이다.
그래도 재밌다!!
잘 몰라도 일단 재밌다!!
재밌으면 된 거겠지!!
다음은 적을 추가해 보고,
플레이어가 미사일 발사하는 것 등..
충돌처리에 대해서도 얘기가 나올 것이다!!
오늘도 고생했다~~!
'Development > 멋쟁이사자처럼 게임개발 부트캠프' 카테고리의 다른 글
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 14일차 - 1945Game (1) (2) | 2025.03.19 |
---|---|
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 13일차 - Dragon Flight (2) (2) | 2025.03.19 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 12일차 - 유니티 깃허브 & 기초 (2) | 2025.03.16 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 11일차 - 델리게이트 & 이벤트 (0) | 2025.03.16 |
[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 10일차 - 네임스페이스 & 필드 & 생성자, 소멸자 & ref, out & 추상 클래스 (2) | 2025.03.13 |