1. 패키지 파일 임포트
- .unitypackage 파일은 다른 프로젝트에서 만든 에셋, 스크립트, 폰트 등을 손쉽게 재사용할 수 있는 포맷이다.
- Project에 드래그 앤 드롭으로 해당 패키지 파일을 임포트할 수 있다.

2. EventSystem
- EventSystem은 Unity에서 UI 입렵 이벤트(클릭, 드레그 등)를 처리하기 위한 핵심 컴포넌트다.
- 새 Canvas를 만들거나 버튼을 추가하면 자동으로 생성된다.
- 삭제하면 UI 버튼이나 슬라이더 입력이 동작하지 않는다.
2-1. EventSystem 삭제 경험
- Hierarchy 창에 만든적도 없는 EventSystem이 있어 삭제한 적이 있다.
- 이후 버튼 UI가 작동하지 않아, 원인을 찾느라 한참 헤맨 적이 있다.
- 실수로 삭제했을 경우, Hierarchy -> 우클릭 -> UI -> Event System을 통해 생성할 수 있다.
3. Instantiate(GameObject, Vector3, Quaternion);
- Instatiate(GameObject)와 같이 Unity에서 오브젝트를 동적으로 생성할 때 사용하는 함수다.
- 제네릭 함수로, GmaeObject 외에도 다양한 타입에 사용할 수 있다.
- 이번 프로젝트에서는 프리팹(GmaeObject)을 원하는 위치에 생성할 때 사용했다.
- 예제 코드:
public class Dog : MonoBehaviour
{
public GameObject food;
void MakeFood()
{
// 발사 위치
Vector2 dogPos = transform.position + offset;
// 회전 정보 필수, 여기선 회전 없음을 의미함
Instantiate(food, dogPos, Quaternion.identity);
}
}
4. 테스트를 위한 Inspector 창에서 변수 조정하기
- 개발 중 변수를 실시간으로 조정하기 위해 public 키워드를 사용에 Inspector창에 노출했다.
- enum을 Inspector창에서 사용하려면 선언과 변수 모두 public으로 지정해줘야 한다.
- 예제: C# 스크립트에서 public으로 지정 후, Inspector창에서 수정
public class Cat : MonoBehaviour
{
// Inspecter에서 사용하려면 eum 선언, enum변수 다 public이어야 함
public enum CATTYPE // 캣 타입
{
NORMAL, FAT, PIRATE
}
public CATTYPE catType;
// 고양이 스피드
public float speed = 7.0f; // 내려오는 속도
public float outSpeed = 5.0f; // 퇴장 속도
// 최대 게이지 바
public float fullGauge = 5.0f;
void Start()
{
// Inspecter창에서 테스트한 값으로 설정하기
switch (catType)
{
case CATTYPE.NORMAL:
speed = 7.0f;
outSpeed = 4.0f;
fullGauge = 5.0f;
break;
case CATTYPE.FAT:
speed = 4.0f;
outSpeed = 2.0f;
fullGauge = 10.0f;
break;
case CATTYPE.PIRATE:
speed = 10.0f;
outSpeed = 5.0f;
fullGauge = 8.0f;
break;
default:
break;
}
}
}

5. Canvas Render Mode
- Canvas는 Unity UI의 루트 컴포넌트로, Render Mode에 따라 렌더링 방식이 달라진다.
5-1. Canvas Render Mode 종류
- Screen Space - Overlay: 가장 일반적인 방식. UI가 화면 위에 렌더링됨.
- Screen Space - Camera: 특정 카메라를 기준으로 UI를 렌더링함. 깊이 조절 가능.
- World Space: UI가 월드 오브젝트처럼 3D 공간 내에 배치됨.
- 예시: 이번 프로젝트 중 고양이의 배고픔 게이지는 World Space, 메인UI는 Screen Space - Overlay로 설정
1) 같은 게이지를 가지고 있지만, 서로 다른 Canvas Render Mode를 사용했다.
2) World Space는 고양이 오브젝트를 기준으로 위치해 있다.
3) Screen Space - Overlay는 카메라 고정 UI이므로 별도로 위치한다.

6. Rigidbody2D 타입과 충돌
- Unity 2D에서는 적어도 하나의 오브젝트에 Rigidbody2D가 있어야 충돌 계산을 수행한다.
- 물리 효과를 제어하기 위해 Rigidbody2D의 Body Type을 조절할 수 있다.
6-1. Rigidbody2D 타입
| 타입 | 중력 영향 | 이동 방식 | 충돌 응답(OnCollision ) | 트리거 응답(OnTriger) |
| Dynamic | 받음 | 물리 시뮬레이션 | 작동함 | 작동함 |
| Kinematic | 안 받음 | 코드로 직접 이동 | 작동 안됨 | 작동함 |
| Static | 안 받음 | 이동 없음 | 작동 안됨 | 작동함 |
6-2. Rigidbody2D 타입에 따른 충돌 판단
- Dynamic: OnCollisionEnter2D() 사용
- Kinematic 또는 Static: Collider에 Is Trigger를 활성화하고, OnTriggerEnter2D() 사용
- 프로젝트 #3의 경우 밥(투사체)이 중력을 받지 않도록 오Kinematic을 사용하였다.
7. static과 싱글턴을 이용한 클래스 접근
- 게임 매니저처럼 전역에서 접근이 필요한 객체는 싱글턴 패턴으로 설계할 수 있다.
- 예시: Cat.cs에서 GameManager.cs의 AddScore() 함수 접근
// GameManager.cs
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
Application.targetFrameRate = 60;
Time.timeScale = 1.0f;
}
// 스테이지 레벨
int level = 0;
public int lvMaxScore = 5;
int score = 0;
public Text lvTxt;
public RectTransform lvFront;
public void AddScore() // 외부에서 호출되는 함수
{
score++;
level = score / lvMaxScore;
lvTxt.text = level.ToString();
lvFront.localScale = new Vector3(score % lvMaxScore / (float)lvMaxScore, 1f, 1f);
}
}
// Cat.cs
public class Cat : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Food"))
{
// "Food"와 충돌했다면 게임 매니저를 호출하여 점수 추가
GameManager.Instance.AddScore();
// 맞은 밥 삭제
Destroy(collision.gameObject);
}
}
}
8. 게임 구현
- 아래는 앞서 설명한 기능으로 구현한 게임입니다.
Unity 기초 프로젝트 #3 - 고양이 밥주기
1. 고양이 밥주기 게임 소개 - 플랫폼: 모바일 - 장르: 2D 캐주얼 게임 - 목표: 고양이들에게 밥을 주어 생선 가게를 지키고, 최대한 높은 스테이지 레벨에 도달하기2. 게임 플레이 - 게임 화면 오른
gyro-code-game.tistory.com
'Programming > Unity 정보, 기능' 카테고리의 다른 글
| Unity 2D 기능 - 애니메이션 녹화 (0) | 2025.07.01 |
|---|---|
| Unity 기초 기능 #5 - 스플래시 이미지, 안드로이드로 빌드하기, 광고 넣기 (0) | 2025.06.18 |
| Unity 기초 기능 #4 - Resources 에셋 로드, 씬 전환 (0) | 2025.06.17 |
| Unity 기초 기능 #2 - 마우스 위치, 태그, PlayerPrefs, FSM, Time (0) | 2025.06.13 |
| Unity 기초 기능 #1 - 애니메이션, 컴포넌트, 스크립트, UI (0) | 2025.06.12 |
