본문 바로가기

전체 글142

Delegate 이해하기 Delegate란?Delegate(대리자)는 C#에서 함수의 참조를 저장하고 호출할 수 있는 객체입니다. 이는 C++의 함수 포인터와 유사하지만, 더 안전한 방식으로 관리됩니다.Delegate를 사용하면 특정 메서드를 미리 지정하지 않고 실행 시점에서 메서드를 동적으로 호출할 수 있습니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다. Delegate 선언 및 사용Delegate를 선언하는 기본적인 방법은 다음과 같습니다.// Delegate 선언public delegate void MyDelegate(string message);// Delegate를 사용하는 메서드 정의public class Example{ public static void PrintMessage(string messa.. 2025. 3. 10.
FindObjectOfType<T>() 함수 설명 FindObjectOfType() 는 컴포넌트를 찾는 함수라고 알고 있는데, Rigidbody, Transform 같은 컴포넌트뿐만 아니라 UIManager, GameManager 같은 사용자가 정의한 클래스도 들어갈 수 있다는 게 어색하게 느껴질 수 있습니다. 이 의문을 풀기 위해 Unity에서 컴포넌트가 무엇인지, 그리고 왜 FindObjectOfType()가 MonoBehaviour를 상속받은 클래스만 찾을 수 있는지 알아보겠습니다. MonoBehaviour 는 컴포넌트(Component) 다Unity에서 MonoBehaviour는 단순한 클래스가 아니라, 게임 오브젝트에 부착할 수 있는 컴포넌트입니다. 이는 MonoBehaviour가 내부적으로 Unity의 Component 클래스를 상속받고 있기.. 2025. 3. 10.
Unity 에서 Tag 사용시 알아야 할 내용 Unity에서는 게임 오브젝트의 태그를 비교할 때 여러 가지 방법이 있지만, 성능과 안정성을 고려하면 CompareTag()를 사용하는 것이 가장 효율적입니다. 이 글에서는 태그 비교 및 검색 함수의 동작 원리를 설명하고, 어떤 방식이 최적화된 방법인지 알아보겠습니다.  Tag 를 비교하는 두 가지 방법CompareTag() 사용 (권장)if (collision.gameObject.CompareTag("Player")) Unity 내부적으로 태그를 정수 ID로 변환하여 비교.문자열 비교를 하지 않으므로 빠르고 최적화됨.태그가 존재하지 않는 경우에도 안전하게 처리됨. tag 속성으로 비교 (비추천)if (collision.gameObject.tag == "Player") gameObject.tag를 가져와.. 2025. 3. 10.
유니티 Inspector 설정 값을 전역으로 사용하기 게임을 개발하다 보면, 전역적으로 접근할 수 있는 데이터 관리 클래스가 필요할 때가 많습니다.이때 흔히 싱글톤(Singleton) 패턴을 사용하지만, 이렇게 되면 유니티 툴 (Inspector) 에서 데이터를 설정할 수 없는 문제가 발생할 수 있습니다. 왜 이런 문제가 생길까요?싱글톤으로 클래스를 만든 후, 멤버 변수를 전역으로 접근하려면 static 이어야 하지만, static 변수는 SerializeField 를 사용할 수 없기 때문입니다.즉, static 변수는 인스펙터에서 설정할 수 없으므로, 유니티 툴에서 값을 조정할 수 없는 문제가 발생합니다. 해결 방법인스턴스 변수 + Awake()에서 static 변수로 복사 이 문제를 해결하려면 인스턴스 변수([SerializeField])로 값을 저장한.. 2025. 3. 10.
전역으로 관리되는 class 를 만들고 싶을 때 (singleton) 게임을 만들다 보면 클래스를 넘나들며, 전역적으로 접근해서 사용하고 싶은 데이터들이 존재하게 됩니다.이때 어떤 형태로 클래스를 만들 것인가에 대한 고민이 생기게 됩니다.그래서 이번에 이 부분에 대해 한번 다뤄보겠습니다. 정적(static) 클래스로 만들기유니티가 아닌 일반적인 C# 프로젝트에서는 전역적으로 데이터를 관리하기 위해 정적 클래스를 사용할 수 있습니다.public static class GameManager{ public static int score;} 이렇게 하면 GameManager.score로 어디서든 간편하게 접근할 수 있습니다. 하지만 문제는 유니티에서는 이것만으로 충분하지 않다는 점입니다. 정적 클래스의 단점• 정적 클래스는 특성상 애초에 인스턴스를 만들 수 없습니다.• .. 2025. 3. 10.
GameObject 와 Transform 의 Find() 에 대해 유니티에서 오브젝트를 검색하는 방법은 크게 두 가지가 있습니다. 첫 번째는 GameObject.Find() 를 사용하여 씬 전체에서 검색하는 것이고, 두 번째는 Transform.Find()를 사용하여 특정 부모 오브젝트의 자식에서 검색하는 것입니다. 각각의 방법은 사용 목적과 성능 차이가 있으므로 적절한 상황에서 선택하여 사용해야 합니다.  GameObject에서 Find 함수 사용하기GameObject는 씬 내의 모든 활성화된 게임 오브젝트를 검색할 때 사용됩니다. 대표적인 함수들은 다음과 같습니다. GameObject.Find ( name ) 씬 전체에서 특정 이름을 가진 오브젝트를 찾습니다. GameObject.FindWithTag ( tag ) 특정 태그를 가진 오브젝트를 찾습니다. GameOb.. 2025. 3. 10.