스크립트를 작성할 때 특정 오브젝트의 컴포넌트에 접근하기 위해서는 GetComponent 함수를 사용해야 한다.
텍스트는 GetComponent<Text>() (예시는 https://greenchoco.tistory.com/164 (비공개글))
오디오는 GetComponent<AudioSource>() 이런 식으로 사용된다.
그리고 직접 만든 스크립트도 컴포넌트의 일종이라서 GetComponent().에 쓸 수 있다.
예를 들어 내가 love 라는 스크립트를 만들었고 그 안에 go메서드가 있다면 GetComponent<love>().go() 으로 love 스크립트의 go메서드를 호출할 수 있다.
좌표를 구할 때는 GetComponent<Transform>() 인데 아래와 같이 쓰면
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Study5_Component : MonoBehaviour
{
public Transform myTr;
void Start()
{
myTr = GetComponent<Transform>(); //자신의 transform 컴포넌트를 가져와 변수에 할당한다.
}
}
이 스크립트를 적용한 오브젝트의 인스펙터를 확인하면 아래와 같이 적용된 것을 확인할 수 있다.
추가로 기본 오브젝트인 Directional Light 의 컴포넌트 할당 예시를 들어볼 것이다.
위의 스크립트에서 아래와 같이 tr와 DLlight 변수 선언을 추가하고 DLlight 변수에 tr 컴포넌트를 할당할 것이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Study5_Component : MonoBehaviour
{
public Transform tr; // 자신의 Transform 컴포넌트를 담을 변수 선언
public Transform myTr; // 자신의 Transform 컴포넌트를 담을 변수 선언
public Light DLlight; // Directional Light의 Light 컴포넌트를 담을 변수 선언
void Start()
{
myTr = GetComponent<Transform>(); //자신의 transform 컴포넌트를 가져와 변수에 할당한다.
DLlight = tr.GetComponent<Light>(); // Directional Light 의 Light 컴포넌트를 가져와 변수에 할당한다.
}
}
해당 오브젝트의 인스펙터는 이렇게 뜰 것이다.
tr 컴포넌트에 아무것도 담지 않아서 tr의 컴포넌트를 가져오는 DLlight 변수의 컴포넌트도 비어있다.
Directional Light 오브젝트에는 기본적으로 아래와 같이 Light 컴포넌트가 포함되어 있다.
즉 DLlight 의 Light 컴포넌트는 Directional Light의 컴포넌트 Light를 가져올 수 있다는 것이다.
그럼 Directional Light를 위의 오브젝트 인스펙터 Tr의 None(Transform) 부분에 드래그하여 넣어준다.
그런 뒤 플레이 버튼을 누르면 아래와 같은 결과가 나온다.
DLlight는 tr에 알당된 Directional Light 의 Light 컴포넌트를 불러와 할당하였다.
추가로, GetComponent 함수를 생략하고 가져올 수 있는 컴포넌트도 있다.
바로 Transform 과 GameObject 인데, 다른 컴포넌트가 없는 빈 오브젝트여도 이 2가지 컴포넌트는 기본적으로 갖고 있으므로 GetComponent 함수를 생략할 수 있다.
GameObject는 인스펙터 창에서 이름있는 곳 그 자체라고 생각하면 되고, transform은 위치를 나타내는 기본 컴포넌트라 삭제할 수 없다.
예를 들어 아래와 같이 쓰면
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Study5_Component : MonoBehaviour
{
public Transform myTr; // 자신의 Transform 컴포넌트를 담을 변수 선언
public GameObject myG; // 자신의 GameObject 컴포넌트를 담을 변수 선언
// Start is called before the first frame update
void Start()
{
myTr = transform;
myG = gameObject;
}
}
아래와 같은 결과가 나온다.
즉 myTr = GetComponent<Transform>(); 은 myTr = transform; 으로 생략 가능하다는 것이고,
myG = gameObject; 는 myG = GetComponent<GameObject >(); 와 같은 뜻인 것이다.
'유니티 C# > C#' 카테고리의 다른 글
C#기초 - FindGameObjectWithTag 함수 사용법 (0) | 2024.04.23 |
---|---|
C#기초 - Find함수 사용법 및 예시 (0) | 2024.04.23 |
C#기초 - 반복문 foreach문 사용법 (0) | 2024.04.21 |
C#기초 - 자료형 키워드 var뜻 (0) | 2024.04.21 |
C#기초 - for문과 while문의 차이 (0) | 2024.04.21 |
댓글