본문 바로가기

Unity27

유니티 Coroutin 에서 continue 를 쓸 때 주의할 점 유니티에서 코루틴을 사용할 때 continue 와 yield return 의 차이를 이해하는 것은 매우 중요합니다. 특히 while (true) 같은 무한 루프를 사용할 때, continue 만 사용하면 예상치 못한 성능 저하가 발생할 수 있습니다. 아래와 같은 코드를 살펴보겠습니다.private IEnumerator SpawnColumn(){ WaitForSeconds wait = new(GameData.PipeSpawnTime); while (true) { if (!GameManager.Instance.IsGameActive) continue; Instantiate(pipesPrefab, transform.position, Quaternio.. 2025. 3. 12.
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.