수색…


통사론

  • 공공 정적 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;

아무 것도 발견되지 않으면 Findnull 반환합니다.

찬성 단점
제한적이고 잘 정의 된 검색 범위 문자열은 약한 참조입니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow