2024.09.21(토)
: 원래 3주차는 14일로 예정되어 있었으나, 학교 정전의 이슈로 일주일 미뤄서 진행됐다.
또한, 서버 파트 선배님께서도 일정이 있으셔서 참석하지 못하셔서 유니티 수업으로만 진행됐다!
[ 🖥️ Client Part. ]
1. 유니티 구성요소
- GameObject (게임 오브젝트)
- Unity 안에서 모든 것의 기본 단위
- 배경, 캐릭터, 버튼, 텍스트, 몬스터 등 전부 GameObject
- 아무것도 없는 빈 GameObject도 만들 수 있음 (빈 오브젝트는 컨트롤러처럼 쓰기도 함)
- component (컴포넌트)
- GameObject에 붙이는 기능 블록
- 움직이게 하고, 모양을 입히고, 충돌하게 만드는 건 전부 컴포넌트가 하는 일
Transform | 위치, 회전, 크기 조절 (모든 오브젝트에 기본 있음) |
Sprite Renderer | 2D 이미지 보여주는 컴포넌트 |
Rigidbody2D | 물리 적용 (중력, 힘 받기 등) |
BoxCollider2D | 충돌 판정 영역 (사각형) |
AudioSource | 소리 재생 |
Animator | 애니메이션 실행 |
Script (C#) | 직접 코딩한 기능 붙이기 (ex. 플레이어 조작 스크립트 등) |
- Scene (씬)
- 게임의 한 화면
- 여러 씬을 전환하면서 게임 흐름을 만들 수 있음
- 주요 창(Window) 구성
- 창 이름 설명
Hierarchy | 씬 안에 있는 모든 오브젝트 목록 |
Scene View | 직접 오브젝트 배치하고 보는 화면 |
Game View | 실제 플레이 화면 미리보기 |
Inspector | 선택한 오브젝트의 속성과 컴포넌트 설정 |
Project | 폴더 구조, 이미지/사운드/스크립트 등 자산 관리 |
Console | 에러 메시지, 디버그 로그 확인 |
- 스크립트 구조 (C#)
- MonoBehaviour를 상속받는 클래스를 만들어서 GameObject에 붙임.
- 대표 함수들:
void Start() {} // 게임 시작할 때 1번 실행
void Update() {} // 매 프레임마다 반복 실행
void OnTriggerEnter2D() {} // 충돌할 때 실행
2. 씬 전환
게임은 여러 씬(Scene) 으로 구성되어 있고, 버튼 클릭으로 씬을 전환할 수 있다.
2025.04.25 - [FE/Unity] - [ Unity2D ] 방치형 게임 - 씬(Scene) 전환 구현
[ Unity2D ] 방치형 게임 - 씬(Scene) 전환 구현
후에 서버에서 로그인 관련 api를 만들어서 붙일 예정이라,유니티에서도 로그인 씬을 만들고 로그인이 성공하면 전투 씬으로 넘어가게끔 구현해야 한다. 이번주에 학습한 내용 전체는 아래 게시
record-coding53.tistory.com
3. DontDestroy
씬 전환 시에도 삭제되지 않는 오브젝트를 만들 수 있다.
2025.04.25 - [FE/Unity] - [ Unity2D ] 방치형 게임 - DontDestroy
[ Unity2D ] 방치형 게임 - DontDestroy
씬 전환 시에도 사라지지 않는 DontDestroy 오브젝트를 만드는 법에 대해 기술하겠다. 이번주에 학습한 전체 내용은 아래 게시글에서 확인이 가능하다.2025.04.25 - [Study] - [ SJCE 스터디 / 3주차 ] Unity
record-coding53.tistory.com
4. 캐릭터/몬스터 애니메이션 설정
캐릭터와 몬스터가 달리는 애니메이션을 넣을 수 있다.
2025.04.25 - [FE/Unity] - [ Unity2D ] 방치형 게임 - 캐릭터 애니메이션
[ Unity2D ] 방치형 게임 - 캐릭터 애니메이션
우리는 게임 그래픽 작업까지는 직접할 수 없어서 상업적 이용을 포함해 자유로운 이용이 가능한 저작권(CC0)에 해당하는 캐릭터 파일을 https://opengameart.org/ 해당 사이트에서 가져올 것이다. 이번
record-coding53.tistory.com
5. 충돌 및 물리 처리 (RigidBody & Collider 설정)
RigidBody & Box Collider 설정
2025.04.25 - [FE/Unity] - [ Unity2D ] 충돌, RigidBody 포지션 변경
[ Unity2D ] 충돌, RigidBody 포지션 변경
캐릭터와 몬스터가 만나면 전투가 시작되어야 한다. 이를 위해 충돌과 물리처리를 해줄 것이다.이번 주차때 배운 전체 내용은 아래 포스트에서 확인할 수 있다.2025.04.25 - [Study] - [ SJCE 스터디 / 3
record-coding53.tistory.com
6. 싱글톤(Singleton) 패턴
Java, C#, C++ 등 객체를 기반으로 하는 언어를 객체지향 언어라고 한다. Class와 같은 하나하나의 인스턴스를 객체라고 한다. 객체는 각각 자신의 역할만 존재한다. 예를 들어 캐릭터가 몬스터를 때렸을 때 몬스터의 hp를 어디서 깎는지를 캐릭터 객체와 몬스터 객체 각각에서는 알 수 없다. 그래서 GameManager와 같은 객체가 존재하는 것이다. 하지만 이 GameManager는 1개만 존재해야 한다.
변수에는 지역(local), 전역(global), 정적(static) 변수가 존재한다. 단 하나만 존재해야 하는 static 변수를 이용하여 GameManager와 같은 객체를 다룰 것이다.
즉, 유니티에서 싱글톤(Singleton) 패턴은 전역에서 하나의 인스턴스만 존재해야 하는 객체를 만들고 싶을 때 자주 사용된다. 게임 개발에서는 주로 GameManager, AudioManager, UIManager 등 중앙 제어 역할을 하는 스크립트에 적용되는데, 이번엔 GameManager에서의 적용에 대해 알아볼 것이다.
💡 싱글톤(Singleton) 패턴이란?
- 오직 하나의 인스턴스만 존재하도록 보장
- 글로벌 접근이 가능해야 함 (GameManager.Instance.함수() 처럼)
- 주로 게임 전체 흐름을 관리하는 객체에 사용됨
📌 싱글톤 코드
public class GameManager : MonoBehaviour
{
public static GameManager instance;
void Awake()
{
// 이미 인스턴스가 존재한다면 새로운 인스턴스를 파괴
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject); // 씬 전환에도 유지
}
else
{
Destroy(this.gameObject);
}
}
}
구문 설명
public static GameManager instance | 외부에서 접근할 수 있는 전역 인스턴스 |
instance = this | 현재 인스턴스를 정적으로 저장 |
DontDestroyOnLoad | 씬이 바뀌어도 오브젝트가 살아남게 함 |
Destroy(this.gameObject) | 중복 인스턴스는 제거 (무조건 1개만 유지) |
GameManager.instance.SomeFunction();
- 어디에서든 GameManager를 참조할 수 있어 편리함
singleton pattern을 사용한 gamemanager 설정
2025.04.25 - [FE/Unity] - [ Unity2D ] 싱글톤 패턴을 이용한 GameManager 설정
[ Unity2D ] 싱글톤 패턴을 이용한 GameManager 설정
캐릭터가 몬스터를 때렸을 때 몬스터의 hp를 어디서 깎는지 캐릭터 객체와 몬스터 객체 각각에서는 알 수 없다. 이를 위해 singleton 패턴을 이용해 단 하나의 GameManager와 같은 객체를 생성한다. 싱
record-coding53.tistory.com
'Study' 카테고리의 다른 글
[ SJCE 스터디 / 5주차 ] 트위너, 서버 프로세스, 세션, 웹 필터 (0) | 2025.05.07 |
---|---|
[ SJCE 스터디 / 4주차 ] Docker, Redis, Nodejs(Async/Await), Coroutines (0) | 2025.04.29 |
[ SJCE 스터디 / 2주차 ] 유니티 기초 (라이프 사이클, State Machine , 배경 설정, 델타 타임, Enum) 와 DB (0) | 2025.04.24 |
[ SJCE 스터디 / 1주차 ] 3-Tier Architecture 기반 클라이언트, 서버 개발 시작하기 (2) | 2025.04.24 |
[ SJCE 스터디 ] 첫 시작과 방향성 (0) | 2024.09.02 |