프로그래밍/Unity 13

FindWithTag() 와 FindGameObjectsWithTag()

FindWithTag()와 FindGameObjectsWithTag()는 모두 Unity에서 특정 **태그(tag)**를 가진 오브젝트를 찾는 함수들이지만, 둘 사이에는 중요한 차이점이 있습니다. 1. FindWithTag()역할특정 태그를 가진 첫 번째 게임 오브젝트를 찾습니다. 반환 값단일 게임 오브젝트 (GameObject) 사용 예시이 함수는 씬에서 "Player" 태그를 가진 첫 번째 오브젝트를 찾고, 그 오브젝트를 반환합니다. 만약 태그를 가진 오브젝트가 없으면 null을 반환합니다. 이 함수는 단 하나의 오브젝트만 찾을 때 유용합니다.GameObject player = GameObject.FindWithTag("Player"); 2. FindGameObjectsWithTag()역할특정 태그를..

유니티에서 특정 오브젝트 찾기 #03 : 성능 최적화

FindObjectsOfType()를 사용하면, 이미 씬에 존재하는 모든 게임 오브젝트를 한 번에 다 가져오는 것이기 때문에, 결국 성능 최적화 측면에서 비효율적입니다.즉, 모든 오브젝트를 메모리에 로드한 후에 다시 필터링을 하는 방식이므로, 성능 최적화는 이미 깨진 상태라고 할 수 있습니다. 문제점FindObjectsOfType()는 씬에 있는 모든 게임 오브젝트를 메모리로 로드하고 나서, 그 중에서 조건을 확인하는 방식이기 때문에, 불필요한 오브젝트들도 로드됩니다.이런 방식은 특히 씬에 오브젝트가 많을 때 성능에 큰 영향을 미칠 수 있습니다. 최적화가 깨지지 않는 대안레이어를 기준으로 성능을 최적화하려면, 모든 오브젝트를 일일이 로드하지 않고, 처음부터 필터링된 오브젝트들만 검색하는 방식으로 전환해야..

유니티에서 특정 오브젝트 찾기 #02 : 성능 최적화

이름이나 태그로 먼저 필터링한 다음에 특정 컴포넌트를 찾는 것은 1차적으로 오브젝트의 범위를 줄이는 필터링 과정이기 때문에, 모든 오브젝트를 한꺼번에 검사하는 것보다 훨씬 더 효율적입니다. 왜 1차 필터링이 빠를까?씬에 있는 모든 오브젝트를 순회하면서 컴포넌트를 찾으려면, 각 오브젝트마다 컴포넌트 목록을 일일이 확인해야 합니다. 이것은 씬의 오브젝트 수가 많을수록 성능에 큰 영향을 줄 수 있습니다.하지만 먼저 이름이나 태그 같은 간단한 조건을 통해 1차적으로 오브젝트 범위를 좁히면, 그다음에는 선택된 오브젝트들에 대해서만 컴포넌트를 확인하면 됩니다.이 과정에서 불필요한 오브젝트는 처음부터 제외되므로 성능이 향상됩니다. 만약 특정 태그를 가진 오브젝트에서만 특정 컴포넌트를 찾고 싶다면, 태그로 먼저 오브젝..

유니티에서 특정 오브젝트 찾기 #01 : 성능 최적화

만약 특정한 오브젝트를 찾기 위해 Unity에서 씬 상의 모든 오브젝트를 확인하려고 한다면, 모든 오브젝트를 순회하며 검사해야 합니다.Unity에는 씬에 존재하는 오브젝트를 순회하고 특정 조건에 맞는 오브젝트를 찾는 방법이 여러 가지가 있지만, 기본적으로는 모든 오브젝트를 확인하는 과정이 필요합니다. 오브젝트를 찾는 방법1. FindObjectsOfType() 사용Unity에서 특정 타입의 컴포넌트를 가진 오브젝트를 찾고 싶다면 FindObjectsOfType() 메서드를 사용할 수 있습니다.이 메서드는 씬에 있는 모든 오브젝트를 순회하며, 해당 타입의 컴포넌트를 가지고 있는 오브젝트들을 찾아 반환합니다. GameObject[] allEnemies = FindObjectsOfType().Where(obj..

유니티에서 Layer 의 역할 : 성능 최적화

Unity에서 레이어를 설정하고 사용할 때는 모든 오브젝트를 검사하는 것이 아니라, 설정된 레이어에 속한 오브젝트들만 검사를 하게 됩니다.이것은 주로 성능 최적화와 특정 오브젝트만 대상으로 작업을 수행하기 위해 사용됩니다. 레이어 설정의 역할Unity에서 **레이어(Layer)**는 게임 오브젝트를 그룹화하는 방식으로, 주로 다음과 같은 상황에서 사용됩니다 * 충돌 검사 (Collision Detection)* 레이캐스트 (Raycasting)* 렌더링 처리 (Rendering) Raycast에서 레이어 사용만약 레이어를 사용하지 않는다면, Unity는 레이캐스트나 충돌 검사를 수행할 때 모든 게임 오브젝트를 검사합니다.하지만 특정 레이어만 대상으로 검사하고 싶을 때, **레이어 마스크(Layer Mas..

유니티에서 컴포넌트가 자동으로 선택되는 원리

Unity는 Inspector 창에서 특정 컴포넌트 타입의 변수를 정의했을 때, 해당 게임 오브젝트가 여러 컴포넌트를 가지고 있어도, 지정된 타입에 맞는 컴포넌트만 자동으로 선택해서 할당합니다.이 원칙은 모든 컴포넌트에 동일하게 적용되며, Unity가 오브젝트를 관리하는 방식에서 비롯됩니다.  Transform 컴포넌트의 경우모든 게임 오브젝트는 기본적으로 Transform 컴포넌트를 가지고 있습니다.Transform은 오브젝트의 위치, 회전, 크기를 관리하는 컴포넌트로, 이 컴포넌트가 없는 오브젝트는 존재할 수 없습니다. 만약 당신이 스크립트에서 Transform 타입의 변수를 선언했다면, 이 변수는 Inspector 창에서 게임 오브젝트를 드래그해 넣을 때 오브젝트에 포함된 다른 컴포넌트는 무시하고,..

RoundToInt()

RoundToInt()는 Unity에서 제공하는 함수로, 주어진 소수를 가장 가까운 정수로 반올림하는 함수입니다.이 함수는 Mathf 클래스에 속해 있으며, 실수 값을 입력으로 받아 정수로 변환합니다.기본적인 사용법은 다음과 같습니다:int result = Mathf.RoundToInt(2.7f);  // 결과: 3 int result2 = Mathf.RoundToInt(2.3f); // 결과: 2  주요 특징소수점 이하가 0.5 이상일 때는 해당 값을 올림 처리합니다.소수점 이하가 0.5 미만일 때는 내림 처리합니다.  예시 코드float value1 = 3.6f; float value2 = 3.3f; float value3 = 3.5f; int roundedValue1 = Mathf.RoundToIn..

StartCoroutine

StartCoroutine()**은 코루틴을 유니티의 코루틴 스케줄러에 등록하는 함수입니다.이렇게 등록된 코루틴은 유니티의 업데이트 루프에 따라 실행되며, 지정된 작업을 프레임 단위로 처리하게 됩니다. 코루틴의 동작 방식코루틴은 프레임 단위로 실행되며, 유니티의 게임 루프에 맞춰 나눠서 실행됩니다.코루틴은 한 번에 모든 작업을 끝내지 않고, yield 키워드를 통해 중간에 멈추고 다시 실행을 재개할 수 있습니다.**StartCoroutine()**을 통해 코루틴을 스케줄러에 등록하면, 유니티는 매 프레임마다 해당 코루틴이 실행할 부분이 있는지 확인하고, yield에 따라 다시 재개할 시점을 결정합니다.  간단한 예시: 코루틴 스케줄링 public class CoroutineExample : MonoBeh..

편집 도구는 어떤걸 선택해야 하나? (Visual Studio, Visual Studio Code)

Visual Studio와 Visual Studio Code의 차이점Visual Studio(비주얼 스튜디오)와 Visual Studio Code(비주얼 스튜디오 코드)는 이름은 비슷하지만, 목적과 기능에서 큰 차이가 있습니다. 둘 다 Microsoft에서 개발한 IDE(통합 개발 환경)이지만, 각각 다른 용도로 사용됩니다.  Visual Studio (비주얼 스튜디오)IDE (Integrated Development Environment)Visual Studio는 완전한 통합 개발 환경으로, 대규모 애플리케이션 개발에 적합합니다. 주요 사용 대상C#, C++, VB.NET 등 여러 언어를 사용한 Windows 및 .NET 관련 애플리케이션 개발에 주로 사용됩니다. 주요 기능고급 디버깅과 프로파일링 기능..

유니티는 어떻게 Coroutine 을 처리하는가

유니티의 코루틴 시스템이 **WaitForSeconds(2)**를 만나면, 유니티 엔진의 내부 스케줄링 시스템에 의해 작동하게 된다. 구체적으로는 어떤 일이 일어나는지 그 과정에 대해서 알아보자. 1. WaitForSeconds는 유니티의 대기 시간 요청을 표현WaitForSeconds는 유니티에서 제공하는 클래스로, 특정 시간만큼 코루틴을 일시 중단하고, 그 시간이 지나면 다시 코루틴이 실행되도록 합니다.코루틴 함수가 yield return new WaitForSeconds(2)를 만나면, 유니티는 그 코루틴의 실행을 2초 동안 대기 상태로 전환합니다.2. 유니티의 코루틴 스케줄러유니티 엔진은 코루틴 스케줄러를 통해 매 프레임마다 코루틴을 관리합니다.코루틴이 WaitForSeconds와 같은 대기 객체..