김산나
[멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 16일 회고록 - 유니티 기초(2) 드래곤 플라이트 개발 본문
[멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 16일 회고록 - 유니티 기초(2) 드래곤 플라이트 개발
김산나 2026. 1. 16. 16:252026_01_16 강의 요약본
1. 프로젝트 세팅
- gitignore세팅
새로운 내용을 배우는만큼, 새로운 프로젝트를 생성한다.
스마트폰 초창기에 나온 게임인 드래곤플라이트의 게임 모작을 진행한다고 한다.
역시 2D 빌트인으로 생성.
프로젝트를 새로 생성하면 inputSystem의 세팅이 리셋되어 있기 때문에 다시 Both로 고쳐둔다.
File > Build Profile > PlayerSetting > Player > Configuration - Active Input Handing: Both
그리고 깃허브에 유니티 프로젝트를 업로드한다.
깃허브에서 유니티 프로젝트를 업로드하기 위해서는 이 거대한 용량을 가지치기할 필요가 있다.
그때 깃에게 이건 빼고 업로드 하라고 부탁하는 문서가 있는데, 그게 ".gitignore" 파일이다.
https://www.toptal.com/developers/gitignore
gitignore.io
Create useful .gitignore files for your project
www.toptal.com
유니티 이외에도 다양한 프로젝트의 gitignore세팅을 도와주는 사이트이다. 해당 사이트에서 자신의 프로젝트 종류를 기입하고 제출하면 gitignore에 들어갈 내용을 띄워준다.
전체 복사한 뒤, 내 프로젝트에 있는 gitignore 파일에 내용을 덮어써주면 된다.
만약 gitignore파일이 없다면 레포지토리 생성 시 No gitignore을 선택한 것이다. 그냥 ".gitignore"이름으로 파일 만들어서 넣어도 똑같이 작동한다.

확장자 없이 정확히 입력하면 된다.
2. 벡터 수학
벡터는 크기, 방향의 값을 갖고 있는 물리량이다.
유니티는 이 내용을 활용해 각 오브젝트의 위치나 움직임을 관리한다.
2차원의 경우 (x, y), 3차원의 경우 (x, y, z)로 입력해서 사용한다.
두 점의 거리(m) 계산은 간단하다.


우리가 벡터값만 입력해 주면 사이의 거리같은 건 유니티 내장 기능으로 간단하게 (혹은 자동으로) 되기 때문에 너무 어렵게 생각할 필요 없는 듯하다.
직접 맞아가며 차차 알아가자.
https://learn.unity.com/tutorials?k=%5B%22lang%3Aen%22%2C%22sl%3Abeginner%22%5D&ob=starts
Tutorials - Unity Learn
Free tutorials, courses, and guided pathways for mastering real-time 3D development skills to make video games, VR, AR, and more.
learn.unity.com
이건 유니티 공식 튜토리얼 사이트이다.
3. 키 입력 방식(GetKey / GetKeyDown / GetKeyUp vs GetAxis)
- GetKey: ㅋ키를 입력하는 동안 실행
- GetKeyDown = 키를 누르는 순간 실행
- GetKeyUp = 키를 떼는 순간 실행
GetKey는 누르는 동안 루프하지만, 나머지 두 개는 1회만 실행한다. 이동같은 움직임 버튼은 GetKey로 구현하는 게 좋겠다.
Input.GetKey(KeyCode.X)
이렇게 사용한다. KeyCode 뒤에 사용할 키를 입력하면 된다.
이 코드는 논리값이기 때문에 if의 조건문에 사용한다.
void Update()
{
if(Input.GetKey(KeyCode.A))
{
transform.Translate(-moveSpeed, 0, 0);
}
}
비슷(?)한 것으로 GetAxis가 있다.
위 경우와 달리 가속도 등의 설정이 포함되어 있다. 그래서 좀 더 자연스러운 움직임이 구현 가능하다.
Input.GetAxis("Horizontal")
따옴표에는 지정한 키워드가 들어가는데, 대표적으로 수직(Vertical), 수평(Horizontal)이 있다. 각각 상하 화살표, W, S / 좌우 화살표, A, D를 누르면 그에 맞게 알잘딱 인식한다.
Edit > ProejctSetting > InputManager > Axes를 누르면 할당된 키, 감도 세팅 등을 조정할 수 있다.
GetKey(KeyCode)와 달리 실수값이기 때문에 보통 이런 식으로 사용한다.
void Update()
{
//x쪽값 설정 vector 방향 * 시간 * 스피드
float distanceX = Input.GetAxis("Horizontal") * Time.deltaTime * moveSpeed;
//x쪽 이동 설정
transform.Translate(distanceX, 0, 0);
}
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
4. 스크롤이 되는 화면 만들기
스크롤 화면을 구현하는 방법은 다양하게 있는데, 수업에서 배운 내용은 Material을 활용한 방식이다. 먼저 배경 이미지를 준비한다.

3D 재질을 사용할 예정이기 때문에 타입은 Default, 루프를 사용할 예정이기 때문에 WrapMode는 Repeat로 세팅한다.
그 다음 오브젝트 생성을 한다.
3D Object > Quad를 생성한다.
그러면 큐브 비슷한 게 생기는데, 이게 이 게임의 배경이 될 공간이다.
사이즈를 조정해서 화면을 덮는다. 3D 개체라서 z값 영향을 받기 때문에 이 점을 염두에 둔다.
배경 오브젝트가 뭐 가린다 싶으면 z값 +해주면 뒤로 감
그리고 이번에는 Material을 생성하고, 인스펙터 창 상단에 Shader을 unlit/Texture로 변경한다.
빛에 영향을 받지 않는 텍스쳐이다.
그리고 우측 네모칸에 세팅해둔 배경이미지를 넣으면 됨

이 Material을 아까 세팅해둔 배경 오브젝트에 넣으면 된다.
Scene에 냅다 던져넣어도 되고, MeshRenderer에서 찾아도 된다.

그럼 기본 준비는 끝났다.
그 다음 배경을 움직여줄 코드를 작성한다.
using UnityEngine;
public class Background : MonoBehaviour
{
// 스크롤이 되는 배경
public float scrollSpeed = 0.5f;
private Material BGmaterial;
void Start()
{
// 오브젝트 자신에 붙어있는 머터리얼 가져오기
// Material이 아닌, MashRenderer에 붙어있는 material을 가져오는 방식으로 한다.
BGmaterial = GetComponent<Renderer>().material;
}
void Update()
{
// offset 머터리얼에서 가져오기
Vector2 newOffset = BGmaterial.mainTextureOffset;
// 새롭게 offset 바꿔주기
newOffset.Set(0, newOffset.y + (scrollSpeed * Time.deltaTime));
// 새롭게 변경한 offset값을 BGmaterial에 넣어주기
BGmaterial.mainTextureOffset = newOffset;
}
}
먼저 스크롤 속도를 관리할 float 변수와 Material 속성의 BGmaterial을 선언해 둔다.
Start()함수에는 실제 Material 컴포넌트를 불러오고, Update()함수에서 이 내용을 변경하는 구조이다.
Vector2는 2차원 벡터를 의미한다. Vector2 타입의 newOffset을 선언하고, 이 newOffset값의 Y값을 현재 위치에서 스크롤 속도 * Time.deltaTime만큼 움직여 준다.
그리고 newOffset값을 mainTextureOffset에 대입해 주면 그 값이 BGmaterial을 타고 적용이 되는 것이다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
그럼 이렇게 정상 작동한다.
5. 좌우로 움직이는 플레이어 만들기
아까 배운 GetAxis를 활용하여 플레이어를 만들어 보자.
먼저 2D Object > Square 오브젝트 생성 후, 스프라이트 랜더러에서 Sprite를 설정한다.

그럼 Sprite이미지대로 오브젝트가 만들어진다.
이제 코드를 짜보자.
using UnityEngine;
public class Player : MonoBehaviour
{
public float moveSpeed = 3;
void Update()
{
//x쪽값 설정 vector 방향 * 시간 * 스피드
float distanceX = Input.GetAxis("Horizontal") * Time.deltaTime * moveSpeed;
//x쪽 이동 설정
transform.Translate(distanceX, 0, 0);
}
}
플레이어 속도를 설정할 moveSpeed 변수를 선언 및 초기화하고, Update()메서드에 움직임 로직을 구현한다.
directX는 GetAxis * Time.deltaTime * 플레이어 속도를 값으로 갖고 있다.
이걸 매 프레임마다 x값에넣어준다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
정상 작동한다.
월요일 시연회를 위해 준비하러 이만 bye
===========================================================
오브젝트 움직임을 구현할 수 있게 되었다 !
스크롤 화면을 구현할 수 있게 되었다 !

'Unity Engine' 카테고리의 다른 글
| [멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 20일 회고록 - 드래곤 플라이트 개발 2 (0) | 2026.01.20 |
|---|---|
| [멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 19일 회고록 - 콘솔 게임 시연회 개발 일지 (0) | 2026.01.19 |
| [멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 15일 회고록 - 추상, 인터페이스, 텍스트 RPG, 유니티 기초 (0) | 2026.01.15 |
| [멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 14일 회고록 - 슈팅게임, 상속 (0) | 2026.01.14 |
| [멋쟁이사자처럼부트캠프 유니티 게임 개발 7기] 2026년 1월 13일 회고록 - 클래스 (0) | 2026.01.13 |