unity3d
GameObjects 찾기 및 수집
수색…
통사론
- 공공 정적 GameObject 찾기 (문자열 이름);
- 공공 정적 GameObject FindGameObjectWithTag (문자열 태그);
- 공공 정적 GameObject [] FindGameObjectsWithTag (문자열 태그);
- public static Object FindObjectOfType (유형 유형);
- public static Object [] FindObjectsOfType (유형 유형);
비고
어떤 방법을 사용할 것인가?
런타임에 GameObjects를 찾는 동안 리소스를 소모 할 수 있으므로주의하십시오. 특히 : FindObjectOfType 또는 Update, FixedUpdate 또는 더 일반적으로 프레임 당 하나 이상의 시간이라는 메서드에서 찾기를 실행하지 마십시오.
- 런타임 메소드
FindObjectOfType
호출하고 필요할 때만Find
-
FindGameObjectWithTag
는 다른 문자열 기반 메소드에 비해 매우 우수한 성능을 제공합니다. Unity는 태그가있는 객체에 별도의 탭을 유지하고 전체 장면 대신 쿼리합니다. - 에디터에서 생성 된 "정적"GameObjects (예 : UI 요소 및 프리 팹)는 편집기에서 직렬화 가능한 GameObject 참조 를 사용합니다
- 자신이 관리하는 목록 또는 배열에 GameObject 목록 유지
- 일반적으로 같은 유형의 많은 GameObject를 인스턴스화하는 경우 Object Pooling을 살펴보십시오
- 값 비싼 검색 방법을 반복해서 사용하지 않으려면 검색 결과를 캐시하십시오.
더 깊숙이 들어가기
Unity와 함께 제공되는 메소드 외에도 자신 만의 검색 및 수집 메소드를 설계하는 것은 상대적으로 쉽습니다.
FindObjectsOfType()
경우 스크립트에서static
컬렉션에 자신의 목록을 보관할 수 있습니다. 장면의 개체를 검색하고 검사하는 것보다 준비된 개체 목록을 반복하는 것이 훨씬 빠릅니다.또는 문자열 기반
Dictionary
인스턴스를 저장하는 스크립트를 만들면 확장 가능한 간단한 태그 시스템을 사용할 수 있습니다.
GameObject의 이름으로 검색하기
var go = GameObject.Find("NameOfTheObject");
찬성 | 단점 |
---|---|
사용하기 쉬운 | 장면의 게임 객체 수에 따라 성능이 저하됩니다. |
문자열은 약한 참조 이며 사용자 오류가 의심됩니다. |
GameObject의 태그로 검색하기
var go = GameObject.FindGameObjectWithTag("Player");
찬성 | 단점 |
---|---|
단일 개체와 전체 그룹을 모두 검색 할 수 있습니다. | 문자열은 약한 참조이며 사용자 오류가 의심됩니다. |
상대적으로 빠르고 효율적입니다. | 코드는 스크립트에서 태그가 하드 코딩되므로 이식 가능하지 않습니다. |
편집 모드에서 스크립트에 삽입 됨
[SerializeField]
GameObject[] gameObjects;
찬성 | 단점 |
---|---|
멋진 공연 | 개체 수집이 정적입니다. |
휴대용 코드 | 같은 장면에서 GameObjects 만 참조 할 수 있습니다. |
MonoBehaviour 스크립트로 GameObject 찾기
ExampleScript script = GameObject.FindObjectOfType<ExampleScript>();
GameObject go = script.gameObject;
FindObjectOfType()
이 없으면null
반환합니다.
찬성 | 단점 |
---|---|
강력하게 입력 된 | 평가할 필요가있는 게임 객체 수에 따라 성능이 저하됩니다. |
단일 개체와 전체 그룹을 모두 검색 할 수 있습니다. |
자식 객체의 이름으로 GameObject 찾기
Transform tr = GetComponent<Transform>().Find("NameOfTheObject");
GameObject go = tr.gameObject;
아무 것도 발견되지 않으면
Find
는null
반환합니다.
찬성 | 단점 |
---|---|
제한적이고 잘 정의 된 검색 범위 | 문자열은 약한 참조입니다. |
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow