전체 글142 Vector3 pos = new Vector3() 의 이해와 대안 유니티에서 Vector3는 struct(구조체)로 정의되어 있기 때문에 값 타입으로 동작합니다.따라서 new Vector3(); 를 사용할 때의 동작 방식은 일반적인 참조 타입(class)과 다릅니다.이번 글에서는 Vector3가 스택 메모리에서 어떻게 처리되는지 살펴보겠습니다. new Vector3() 의 의미Vector3 pos = new Vector3(); 이 코드는 스택(Stack) 메모리에서 Vector3 공간을 만들고, 기본값(0,0,0)으로 초기화한 후, pos 변수에 복사하는 과정을 포함합니다. 제일 먼저 new Vector3(); 가 실행되면서 스택(Stack) 메모리에 Vector3 구조체 공간을 생성하고, 기본값(0,0,0) 으로 초기화 합니다.그 후 Vector3 pos 변수 선언에.. 2025. 3. 10. 유니티에서 특정 오브젝트 찾기 : 성능 최적화 만약 특정한 오브젝트를 찾기 위해 Unity에서 씬 상의 모든 오브젝트를 확인하려고 한다면, 모든 오브젝트를 순회하며 검사해야 합니다.Unity에는 씬에 존재하는 오브젝트를 순회하고 특정 조건에 맞는 오브젝트를 찾는 방법이 여러 가지가 있지만, 기본적으로는 모든 오브젝트를 확인하는 과정이 필요합니다. 오브젝트를 찾는 방법FindObjectsOfType() 사용Unity에서 특정 타입의 컴포넌트를 가진 오브젝트를 찾고 싶다면 FindObjectsOfType() 메서드를 사용할 수 있습니다.이 메서드는 씬에 있는 모든 오브젝트를 순회하며, 해당 타입의 컴포넌트를 가지고 있는 오브젝트들을 찾아 반환합니다. GameObject[] allEnemies = FindObjectsOfType().Where(obj =.. 2025. 3. 9. FindWithTag() 와 FindGameObjectsWithTag() FindWithTag()와 FindGameObjectsWithTag()는 모두 Unity에서 특정 태그(tag) 를 가진 오브젝트를 찾는 함수들이지만, 둘 사이에는 중요한 차이점이 있습니다. FindWithTag()역할특정 태그를 가진 첫 번째 게임 오브젝트를 찾습니다.반환 값단일 게임 오브젝트 (GameObject)사용 예시이 함수는 씬에서 "Player" 태그를 가진 첫 번째 오브젝트를 찾고, 그 오브젝트를 반환합니다. 만약 태그를 가진 오브젝트가 없으면 null을 반환합니다. 이 함수는 단 하나의 오브젝트만 찾을 때 유용합니다.GameObject player = GameObject.FindWithTag("Player"); FindGameObjectsWithTag()역할특정 태그를 가진 모든 게임 오.. 2025. 3. 9. Unity Inspector 에서 자동으로 컴포넌트 할당되는 원리 Unity는 Inspector 창에서 특정 컴포넌트 타입의 변수를 정의했을 때, 해당 게임 오브젝트가 여러 컴포넌트를 가지고 있어도, 지정된 타입에 맞는 컴포넌트만 자동으로 선택해서 할당합니다.이 원칙은 모든 컴포넌트에 동일하게 적용되며, Unity가 오브젝트를 관리하는 방식에서 비롯됩니다. Transform 컴포넌트의 경우모든 게임 오브젝트는 기본적으로 Transform 컴포넌트를 가지고 있습니다.Transform은 오브젝트의 위치, 회전, 크기를 관리하는 컴포넌트로, 이 컴포넌트가 없는 오브젝트는 존재할 수 없습니다. 만약 당신이 스크립트에서 Transform 타입의 변수를 선언했다면, 이 변수는 Inspector 창에서 게임 오브젝트를 드래그해 넣을 때 오브젝트에 포함된 다른 컴포넌트는 무시하고,.. 2025. 3. 9. 7. yield return 에 대해 ( 최종화 : 최적화 ) 이제까지 yield return과 코루틴을 활용하는 방법을 알아보았습니다. 이번 글에서는 코루틴을 더 효율적으로 사용하는 방법과 InvokeRepeating() 과의 차이점을 살펴보겠습니다. WaitForSeconds 캐싱으로 최적화하기코루틴에서 yield return new WaitForSeconds(time);을 반복적으로 호출하면 매번 새로운 객체가 생성되면서 GC(Garbage Collection) 부담이 생길 수 있습니다. 이를 방지하려면 WaitForSeconds 객체를 미리 생성해서 재사용하는 것이 좋습니다. 기존 방식 (비효율적)IEnumerator ExampleCoroutine(){ while (true) { Debug.Log("실행 중"); yield.. 2025. 3. 9. 6. yield return 에 대해 ( Coroutine 을 중지하고자 할 때 ) 이전 글에서는 유니티에서 yield return을 활용하여 2D 스프라이트 애니메이션을 구현하는 방법을 다루었습니다. 이번 글에서는 코루틴을 중지하는 다양한 방법과 yield break 를 활용하는 방법을 살펴보겠습니다. StopCoroutine()을 사용하여 코루틴 중지하기Unity에서는 StopCoroutine()을 사용하여 실행 중인 코루틴을 중지할 수 있습니다. StopCoroutine()에는 두 가지 방식이 있습니다. 1. 코루틴의 이름을 사용하여 중지void Start(){ StartCoroutine("ExampleCoroutine");}IEnumerator ExampleCoroutine(){ while (true) { Debug.Log("코루틴 실행 중"); .. 2025. 3. 9. 이전 1 ··· 19 20 21 22 23 24 다음