📌 Unity 기본 익히기
미니게임 제작을 통해 유니티 기본 사용법과 C# 기본 문법 익히기
[빗물받는 르탄이]
캐릭터가 좌우로 이동하며 위에서 떨어지는 빗방울을 받아 점수를 얻는 게임
에디터 주요 화면 구성
| 창 이름 | 설명 |
| Scene View | 게임 씬을 편집하는 공간. 카메라처럼 자유롭게 돌아다니며 오브젝트를 배치하거나 수정할 수 있음 |
| Game View | 실제 플레이어가 보는 시점. 실행했을 때 게임이 어떻게 보이는지 확인 가능 |
| Hierarchy | 씬(Scene)에 존재하는 모든 오브젝트 목록을 계층 구조로 보여줌. 부모-자식 관계도 확인 가능 |
| Inspector | 선택한 오브젝트의 속성을 확인하고 수정할 수 있는 패널. 위치, 크기, 컴포넌트 등 설정 가능 |
| Project | 게임에서 사용하는 모든 에셋(asset)들이 정리되어 있는 곳. 이미지, 스크립트, 프리팹, 오디오 등 |
| Console | 로그, 오류 메시지 출력되는 공간. Debug.Log() 출력이나 에러 확인할 때 사용 |
| Toolbar | 실행 버튼, 씬 이동 도구 (손바닥, 화살표 등), 조정 속성 등을 조작할 수 있는 도구 모음 |
기초 문법 연습
기본 씬 구성
오브젝트에 Order in Layer 설정 → Sprite끼리 앞뒤 순서 조절
애니메이션 맛보기
애니메이션 만들기 과정
- 애니메이션 파일 만들고, Loop Time에 체크
- Animation은 동작파일, Controller는 Animation을 컨트롤 하는 것(예- 보통상태 / 맞을 때 / 뛸때 어떤 애니메이션을 사용)
- 시간 축에 키프레임 추가
- 움직임 or 크기 변화 설정 후 저장
캐릭터 움직이기
- 캐릭터에 스크립트 추가해서 좌우 움직임 구현
- 오른쪽으로 이동: transform.position += Vector3.right * 0.05f
- Vetor3 (x,y,z) → x,y,z 의 3차원 값
Vetor3.right → Vector3(1, 0, 0)
Vector3.right * 0.05f → Vector3(1, 0, 0) * 0.05f → Vector3(1 * 0.05f, 0 * 0.05f, 0 * 0.05f) → Vector3(0.05f, 0, 0) - 속도 일정하게 만들기: Application.targetFrameRate = 60;
- 벽에 닿으면 방향, 좌우 전환 / 마우스 클릭하면 움직이는 방향, 좌우 바꾸기
- 오른쪽으로 이동: transform.position += Vector3.right * 0.05f
if (Input.GetMouseButtonDown(0))
{
direction *= -1;
renderer.flipX = !renderer.flipX;
}
if (transform.position.x >= 2.6f)
{
direction *= -1;
renderer.flipX = true;
}
if (transform.position.x <= -2.6f)
{
direction *= -1;
renderer.flipX = false;
}
빗방울 구현하기
기본
- Rigidbody 2D 추가 → 중력 영향 받게 함
- 충돌 세팅: Add componet → circle/box collider 2d
- 충돌 조작: tag 설정
- 충돌 확인: OnCollisionEnter2D()
- 땅과 충돌 시 Destroy(gameObject) 로 제거
랜덤
- 랜덤 위치 설정: Random.Range(xMin, xMax)
- 고정 크기 조절: transform.localScale = new Vector3(size, size, 0);
- 고정 색 변경: GetComponent().color = new Color(100 / 255f, 100 / 255f, 255 / 255f, 255 / 255f);
반복
- 빗방울 복제하기
- Prefabs : 복제할 수 있는 상태로 만듦
- Instantiate(): 프리팹 복제
- 일정 시간 (0.5초) 간격으로 빗방울 생성: InvokeRepeating("MakeRain", 0, 0.5f);
점수 시스템
- 점수 UI 구성: Text
- 싱글톤 패턴으로 UI 매니저 구성 → 어디서든 점수 업데이트 가능
public static GameManager Instance;
void Awake()
{
Instance = this;
}
게임 오버
- 남은 시간 카운트 다운: totalTime -= Time.deltaTime
- 게임 초기화하기
private void Awake()
{
Instance = this;
Time.timeScale = 1.0f;
}
💡 느낀 점
- 처음에는 복잡해보였지만 하나씩 구현해보니 재밌고 이해가 잘 되었다.
- 스크립트와 오브젝트를 연결하는 방식이 직관적이어서 금방 적응 가능했다.
.
⁉️ 오류 해결하기
스크립트 끌어다 놓기 했을 때 오류 발생

스크립트를 끌어다 놓았을 때 오른쪽과 같은 오류가 발생
이 오류는 스크립트의 이름과 내부 코드의 클래스명이 일치하지 않는 경우에 주로 발생하는 오류로, 스크립트의 이름과 클래스명은 대, 소문자까지 일치해야 한다.
'TIL' 카테고리의 다른 글
| 구조체(struct) vs 클래스(class) (0) | 2025.04.14 |
|---|---|
| 내일배움캠프 5일차 TIL (0) | 2025.04.11 |
| 내일배움캠프 4일차 TIL (0) | 2025.04.10 |
| 내일배움캠프 3일차 TIL (0) | 2025.04.09 |
| 내일배움캠프 1일차 TIL (0) | 2025.04.07 |