전체 글49 static vs 참조 주입(manager = this) / 게임 로직(Game Logic) 이전 Undead Survivor 프로젝트와 달리 이번 프로젝트에선 GameManager를 static으로 사용하지 않고, Dongle.cs에서 manager를 따로 연결했다. 이 차이점과 언제 사용하는 지에 대해 궁금해서 알아봤다. 용어 정리용어설명static모든 스크립트 어디서든 접근 가능한 전역적인 공유 변수this현재 클래스 인스턴스를 의미하는 키워드instance클래스를 new나 컴포넌트로 만든 실제 오브젝트 하나하나언제 static을 쓰는 게 좋을까?- 전역에서 자주 접근해야 할 때- GameManager가 하나뿐이고 중심 역할일 때- 빠르게 개발하거나 프로토타입일 때- 테스트나 구조화, 멀티 씬 지원이 필요할 땐 불리public static GameManager instance;void Aw.. 2025. 3. 27. 인보크(Invoke)와 코루틴(Corutine) / 게임 매니저(Game Manager) Invoke특정 메서드를 일정 시간 후에 한 번 실행할 때 사용한다.(아주 간단하게 시간 지연 호출이 필요할 때) 사용 방법Invoke("MethodName", 3f); // 3초 후 해당 메서드 실행InvokeRepeating("MethodName", delayTime, repeatRate); // 일정 시간 뒤에 실행하고, 반복 실행CancelInvoke("MethodName"); // 반복 중단Corutinehttps://hwan91.tistory.com/47 코루틴(Corutine) / 적 생성(Enemy, Spawn)CorutineIEnumerator는 **코루틴 전용 반환형(인터페이스)**이다.코루틴은 일반 함수와 다르게, 실행 도중 yield return을 만나면 일시 중지되었다가 나중에 다.. 2025. 3. 27. 싱글톤 패턴(Singleton Pattern) / 게임 매니저(Game Manager) / 오디오 매니저(Audio Manager) Singleton Pattern싱글톤 패턴은 게임에서 "하나만 존재해야 하는 객체"를 만들 때 사용하는 디자인 패턴이다.예를 들어, GameManager(게임 전체 관리), AudioManager(배경음, 효과음 관리), UIManager(UI 관리) 이런 것들은 굳이 여러 개 만들 필요가 없고 어디서든 쉽게 접근할 수 있어야 한다.그래서 싱글톤 패턴을 사용하면 딱 하나만 존재하도록 강제할 수 있다. 기본 패턴 코드public class GameManager : MonoBehaviour{ public static GameManager instance; // 자기 자신을 저장할 변수 (정적 변수) void Awake() { if (instance == null) // 처음 실.. 2025. 3. 19. 로컬 저장소(PlayerPrefs) / 업적 시스템(Achievement System) PlayerPrefs로컬 저장소 기능으로, SetInt(), SetFloat(), SetString()을 사용해서 숫자, 실수, 문자열 데이터를 저장 가능하다.게임이 꺼져도 데이터가 유지된다. (PlayerPrefs.Save()를 명시적으로 호출하지 않아도 자동 저장됨) 사용 방법PlayerPrefs.SetInt("HighScore", 100);PlayerPrefs.SetString("PlayerName", "Alex");PlayerPrefs.Save(); // 저장 (자동으로 저장되므로 생략 가능)- "HighScore" 키에 100 저장- "PlayerName" 키에 "Alex" 저장 PlayerPrefs에서 데이터 불러오기int score = PlayerPrefs.GetInt("HighScore".. 2025. 3. 19. 레벨업 시스템(LevelUp System) / 손과 무기 장착 표현(Hands) / 캐릭터 선택(Character Select) LevelUp.cs플레이어가 레벨업할 때 실행되는 UI 관리 스크립트로, 레벨업 UI를 표시하고 랜덤한 3개의 아이템을 선택하여 활성화,플레이어가 선택한 아이템을 적용하는 역할을 한다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class LevelUp : MonoBehaviour{ RectTransform rect; // 레벨업 UI의 크기 및 위치 조절 Item[] items; // 레벨업 UI에서 표시할 아이템 목록 void Awake() { rect = GetComponent(); // GetComponentsInChildren(true) = 비활성.. 2025. 3. 19. 스크립터블 오브젝트(Scriptable Object) / 능력 업그레이드(Ability Upgrade) Scriptable ObjectScriptableObject는 보통 MonoBehaviour를 상속받아 게임 오브젝트와 함께 동작하는 스크립트와 달리 씬에 존재하지 않아도 되는 데이터만 저장하는 객체이다.게임에서 반복적으로 사용되는 데이터(아이템, 능력치 등)의 설정을 줄이고, 저장 및 효율적으로 관리하는 데 사용된다. 왜 사용할까?- 데이터 재사용의 편리성 : 한 번 생성해두면 여러 오브젝트에서 공유 가능- 메모리 절약 : MonoBehaviour 기반 스크립트는 씬이 로드될 때마다 새롭게 생성되지만, ScriptableObject는 같은 데이터라면 하나만 로드해서 공유 가능- 유니티 에디터에서 편집 가능 : 에셋 파일로 저장되어 Unity 에디터에서 직접 값을 변경할 수 있음, CreateAssetM.. 2025. 3. 18. 열거형(enum) / 월드 좌표(World Position)와 스크린 좌표(Screen Position) / HUD(Head-Up Display) 열거형(enum) 관련된 값들을 그룹화하여 의미 있는 이름으로 정의하는 데이터 타입으로, 개발자가 정의한 특정한 값들만 가질 수 있도록 제한한다. 동작 방식public enum InfoType { Exp, Level, Kill, Time, Health }InfoType type = InfoType.Exp;- 변수 타입은 InfoType 타입이며, 오직 Exp, Level, Kill, Time, Health 중 하나만 가질 수 있다.- 내부적으로는 정수값으로 저장된다. Exp → 0Level → 1Kill → 2Time → 3Health → 4- 열거형은 기본적으로 첫 번째 항목이 0, 그다음부터 1, 2, 3 순으로 자동 할당된다. public enum InfoType { Exp = 10,.. 2025. 3. 18. 범위 감지(Scanner) / 무기(Weapon)와 총알(Bullet) Scanner.cs플레이어 주변의 목표(적, 아이템 등)를 탐색하는 스크립트로, 가장 가까운 적을 찾아 자동 조준하는 역할을 한다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class Scanner : MonoBehaviour{ public float scanRange; // 스캔 반경(범위) public LayerMask targetLayer; // 스캔 대상 레이어(감지 대상이 속한) public RaycastHit2D[] targets; // 스캔 결과 리스트(감지된 적들을 저장할 배열) public Transform nearstTarget; // 가장 가까운 대상(적) .. 2025. 3. 18. 배열과 리스트의 차이 / 오브젝트 풀링(Object Pooling) 배열(Array)과 리스트(List)배열(Array)과 List(제네릭 리스트)는 여러 개의 데이터를 저장하는 방법이지만, 크기 조절, 사용 편의성, 성능 최적화 면에서 차이가 있다.배열배열은 고정된 크기의 데이터 저장소로, 빠른 데이터 접근이 가능하지만 크기 조절이 불가능하다. 특징int[] numbers = new int[5]; // 크기가 5인 배열 선언numbers[0] = 10;numbers[1] = 20;numbers[2] = 30;Debug.Log(numbers[0]); // 10 출력- 한 번 크기를 정하면 변경할 수 없음 (new int[5] → 항상 5개까지만 저장 가능)- 빠른 데이터 접근이 가능 (numbers[0] → 즉시 가져올 수 있음)- 크기 변경이 필요하면 새로운 배열을 만.. 2025. 3. 17. 이전 1 2 3 4 ··· 6 다음