본문 바로가기

Unity20

UIManager를 활용한 효율적인 UI 업데이트 구조 게임을 개발할 때 UI 업데이트를 어떻게 관리할 것인가 하는 문제는 매우 중요합니다.초기에는 UI 요소가 적기 때문에 간단한 싱글톤 UIManager로도 충분하지만, 게임이 점점 커지면서 UI 요소가 늘어나면 유지보수가 어려워질 수 있습니다.이번 글에서는 기본적인 UIManager 방식부터 시작해, UI 요소가 많아질 때의 문제점과 이를 해결하는 이벤트 기반 UI 업데이트 방식까지 차근차근 살펴보겠습니다.  UIManager 를 활용한 기본적인 UI  관리 방식일반적으로 UI를 업데이트할 때, FindObjectOfType() 을 사용해서 UI 요소를 찾거나, 싱글톤 UIManager를 활용하는 방식이 많이 사용됩니다. 여기서는 싱글톤 UIManager를 활용하는 기본적인 예제를 먼저 살펴보겠습니다. u.. 2025. 3. 11.
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.
GameObject 와 Transform 의 Find() 에 대해 유니티에서 오브젝트를 검색하는 방법은 크게 두 가지가 있습니다. 첫 번째는 GameObject.Find() 를 사용하여 씬 전체에서 검색하는 것이고, 두 번째는 Transform.Find()를 사용하여 특정 부모 오브젝트의 자식에서 검색하는 것입니다. 각각의 방법은 사용 목적과 성능 차이가 있으므로 적절한 상황에서 선택하여 사용해야 합니다.  GameObject에서 Find 함수 사용하기GameObject는 씬 내의 모든 활성화된 게임 오브젝트를 검색할 때 사용됩니다. 대표적인 함수들은 다음과 같습니다. GameObject.Find ( name ) 씬 전체에서 특정 이름을 가진 오브젝트를 찾습니다. GameObject.FindWithTag ( tag ) 특정 태그를 가진 오브젝트를 찾습니다. GameOb.. 2025. 3. 10.
유니티에서 특정 오브젝트 찾기 : 성능 최적화 만약 특정한 오브젝트를 찾기 위해 Unity에서 씬 상의 모든 오브젝트를 확인하려고 한다면, 모든 오브젝트를 순회하며 검사해야 합니다.Unity에는 씬에 존재하는 오브젝트를 순회하고 특정 조건에 맞는 오브젝트를 찾는 방법이 여러 가지가 있지만, 기본적으로는 모든 오브젝트를 확인하는 과정이 필요합니다.  오브젝트를 찾는 방법FindObjectsOfType() 사용Unity에서 특정 타입의 컴포넌트를 가진 오브젝트를 찾고 싶다면 FindObjectsOfType() 메서드를 사용할 수 있습니다.이 메서드는 씬에 있는 모든 오브젝트를 순회하며, 해당 타입의 컴포넌트를 가지고 있는 오브젝트들을 찾아 반환합니다. GameObject[] allEnemies = FindObjectsOfType().Where(obj =.. 2025. 3. 9.