본문 바로가기

분류 전체보기142

코루틴의 한계 : 일시 정지가 불가능한 구조 Unity 코루틴은 흐름을 간단히 제어할 수 있습니다.그러나 기본적으로 "시작"과 "완전 종료"만 지원하며, 중간에 멈췄다가 이어서 실행하는 기능은 존재하지 않습니다. 그 이유는 ? StartCoroutine 으로 생성된 코루틴은 메모리에 "Coroutine Handle"로 관리됩니다.StopCoroutine이나 StopAllCoroutines를 호출하면 이 Handle은 메모리에서 완전히 삭제됩니다.따라서 삭제된 코루틴은 어디까지 실행했는지 정보가 모두 사라지며, 복구할 수 없기 때문입니다. 저장이 불가능한 구조코루틴은 진행 상황을 저장하지 않습니다.도중에 StopCoroutine을 호출하면 그 자리에서 종료되고, 다시 StartCoroutine을 호출하면 항상 처음부터 다시 시작합니다.중간부터 이어서.. 2025. 4. 27.
Unity에서 Enum을 Dictionary로 연결하여 Hierarchy 자식 관리하기 Unity 프로젝트를 진행하다 보면, 게임 오브젝트의 Hierarchy 안에 있는 자식 오브젝트들을 코드로 관리해야 할 때가 많습니다.가장 단순한 방법은 배열([]) 을 사용하여 인덱스 번호(0, 1, 2, ...) 로 오브젝트를 저장하는 것입니다. 하지만 이 방법에는 한 가지 문제점이 있습니다. "인덱스 번호는 의미를 설명하지 못합니다." ( 0이 무슨 상태이고, 1이 무슨 상태인지 숫자만 보고 알기 어렵습니다. )또한 배열 인덱스 대신 enum을 사용하려고 (int)enum 식으로 강제 변환을 하게 되는데, 이 역시 코드 가독성과 유지보수성을 떨어뜨리는 요인이 됩니다. 배열 대신 Dictionary로 구조 개선하기Dictionary 를 사용하면 Enum 값을 키(Key)로, 오브젝트 리스트를 값(Va.. 2025. 4. 27.
대리자를 이용한 FSM 만들기 게임 개발을 하다 보면 캐릭터의 상태를 관리해야 하는 상황이 자주 생깁니다.플레이어가 Idle → Walk → Die 같은 상태를 오가며 행동해야 할 때, 우리는 흔히 FSM (Finite State Machine) 을 사용하게 됩니다.처음에는 대부분 switch-case 방식으로 구현하게 됩니다. 상태 수가 적고, 단순히 Update()만 필요할 때는 이 방식이 가장 쉽고 직관적입니다. 하지만 상태가 점점 늘어나고, 각 상태마다 진입(Enter), 수행(Update), 종료(Exit) 같은 단계가 나뉘기 시작하면 코드는 금세 복잡해지고, 유지보수가 어려워집니다.이럴 때 대리자(delegate)를 활용하면 FSM 구조를 더 유연하고 간결하게 만들 수 있습니다. FSM 구조, 이렇게 구성합니다이번 예제에서.. 2025. 4. 24.
delegate 를 더 간결하게 선언하는 방법 C# 에서 delegate는 함수 자체를 변수처럼 다룰 수 있게 해주는 기능입니다. 이 덕분에 함수 호출을 동적으로 구성할 수 있고, 이벤트나 콜백 처리에 자주 사용됩니다.하지만 직접 delegate 형식을 정의해서 사용하는 방식은 코드가 길어지고 구조가 복잡해 보일 수 있습니다. 전통적인 delegate 방식// delegate 형식 정의private delegate void StateCallback();// delegate 변수 선언private StateCallback onStart;private StateCallback onUpdate;private StateCallback onComplete;// 함수 할당onStart = () => Debug.Log("시작");onUpdate = () => D.. 2025. 4. 23.
bool isValue = (조건식) : 삼항 연산자를 보다 단순하게 C# 을 처음 배울 때, 다음과 같은 형태의 코드를 자주 접하게 됩니다:bool isEven = (number % 2 == 0) ? true : false; 처음에는 조건식의 결과를 true 또는 false로 나누어 대입하는 이 방식이 자연스럽고 익숙할 수 있습니다.삼항 연산자 (조건 ? A : B) 는 간단한 분기 처리를 할 때 자주 사용되는 문법이기도 합니다.하지만 위 코드는 다음과 같이 훨씬 더 간단하게 쓸 수 있습니다.bool isEven = (number % 2 == 0); 조건식을 그대로 대입해도 되는 이유조건식 (number % 2 == 0) 자체가 bool 값을 반환하기 때문에, 별도의 분기 처리 없이도 결과를 바로 bool 변수에 대입할 수 있습니다.다시 말해, 조건이 참이면 true, .. 2025. 4. 22.
구조체를 배열로 만들면 메모리 저장 위치는 어디일까? C# 에서 "구조체(struct)는 스택에 저장된다" 는 말을 자주 들어봤을 것입니다. 그런데 배열은 "힙에 저장된다"고 합니다. 그렇다면 "구조체를 배열로 만들면 어디에 저장될까?" 하는 궁금증이 생깁니다.이 글은 바로 그 궁금증을 풀기 위해 정리한 내용입니다. 구조체는 기본적으로 스택에 저장다음처럼 지역 변수로 구조체를 선언하면, 이 변수는 스택(stack)에 저장됩니다:void MyMethod(){ MyStruct s = new MyStruct(); // 스택에 저장됨} 값 타입(struct, int, float, bool 등) 은 참조 타입(class)과 달리 스택 메모리에 저장되는 것이 일반적입니다. 배열은 힙에 저장 (new 없이도)C#에서 배열은 참조 타입입니다. 즉, 배열 자체는 무조.. 2025. 4. 22.