[기초지식] 장면에서 데이터를 얻는 방법

5531 단어 기초C#Unity

개요



Unity에서 장면에있는 GameObject와 그것에 부착 된 구성 요소를 얻는 방법.

GameObject 얻기



Inspector에서 설정



검색을 할 때까지 실행 전 상태에서 이미 장면에있는 것에만 유효한 방법.
직렬화 가능한 필드를 작성하고 Unity Inspector에서 설정합니다.

Sample.cs
public class Sample : MonoBehaviour
{
    // [SerializeField]を書くことで、シリアライズ可能なフィールドを宣言できる。
    [SerializeField] private GameObject _object;

    // publicなフィールドでも可。
    // public GameObject _object;
}




GameObject 이름으로 검색



GameObject에 설정된 이름으로 검색합니다.
GameObject obj = GameObject.Find("探したいオブジェクト名");

연결된 부품으로 검색



특정 컴포넌트를 연결했을 때 사용 가능하지만 성능이 나쁘다.
GameObject obj = FindObjectOfType</*指定したいコンポーネント*/>().gameObject;

태그로 검색



Unity에서는 GameObject에 태그를 설정할 수 있으며 태그를 사용하여 검색합니다.
하지만 찾고자 하는 태그는 미리 태그 관리자에 설정되어 있어야 합니다.Find 이나 FindObjectOfType 에 비해 안정된 실행 속도를 자랑한다.
// 指定したタグを持つGameObjectを 1つ 取得する。
GameObject obj = GameObject.FindWithTag("探したいオブジェクトに設定されたタグ");

// 指定したタグを持つGameObjectを 全て 取得する。
GameObject[] objs = GameObject.FindGameObjectsWithTag("探したいオブジェクトに設定されたタグ");

구성 요소 얻기



Inspector에서 설정



방법은 GameObject 때와 같기 때문에, 이미지에서의 설명은 생략.

Sample.cs
// 欲しいコンポーネントを仮に Example とする
public class Sample : MonoBehaviour
{
    [SerializeField] private Example _object;

    // または
    // public Example _object;
}

GetComponent로 가져오기


GetComponent 함수로 얻는다.
지정한 GameObject로부터 컴퍼넌트를 취득하는 것이므로, GameObject의 취득과 조합하는 것도 가능.
// 自身を持つGameObjectにアタッチされた、他のコンポーネントを取得する場合
var cmp = this.gameObject.GetComponent</*欲しいコンポーネント*/>();

// CUBE という名前のGameObjectから取得したい場合
var cmp = GameObject.Find("CUBE").GetComponent</*欲しいコンポーネント*/>();

장면 내에서 얻기



GameObject의 때에 사용한 FindObjectOfType 의 본래의 용도.
자주 사용해서는 안됩니다.
// シーン内にある、指定したコンポーネントの1つを取得する
var cmp = FindObjectOfType</*欲しいコンポーネント*/>();

// シーン内にある指定したコンポーネント全てを取得する
var cmp = FindObjectsOfType</*欲しいコンポーネント*/>();

요약


  • 취득 하나를 매우 다양한 방법이 있다.
  • 어떤 경우에는 처리가 무거워지기 때문에 다음과 같은 조치를 취해야 한다.
  • 초기화시에 1회만 호출한다.
  • 빈번하게 호출하는 것은, 미리 배열 등으로 보관할 수 있도록(듯이) 설계해야 한다.


  • 실행 확인 환경



    Unity [2018.2 이상]

    좋은 웹페이지 즐겨찾기