본문 바로가기
Programming/Unity 기초탈출기

[Unity] 유니티 기초 탈출기 - Part.03 - 스크립트 편 ( GetComponent )

by 타임박스 2022. 4. 18.
반응형


✔ Unity - GetComponent 란?



안녕하세요.

이번시간부터는 Part.03 스크립팅 (코드작성)으로 넘어갈게요.

유니티에서 많이 사용되는 API들을 다루며 어떻게 응용되는지 한번 살펴볼게요.

아마도 Part.03가 가장 분량이 많고 어려울것같네요.. 포기하지 마시고 화이팅!

가장 먼저 알아야할 함수는 바로 GetComponent입니다.

영어를 한국어로 번역해보면 대부분 함수기능을 유추할 수 있습니다.

맞습니다. 컴포넌트를 얻어오는 함수입니다. ㅎㅎㅎ

3D 오브젝트(Cube)를 하나 만들어볼게요.

위 그림 처럼 Cube를 생성하고 선택하면 Inspector창에 나타납니다.

Transform, Mesh Filter, Mesh Renderer, BoxCollider가 자동으로 붙어있죠?

이것들이 Component입니다. 한 객체(Cube)에 등록되어있는 Component들을 나타냅니다.

이전에 우리가 C# 스크립트를 만들고 AddComponent를 클릭해서 등록했었죠?

Transform, Mesh Filter 등등은 이미 유니티에서 만들어놓은것이고 C#으로는 우리가 새로 만드는거죠.

 

● GetComponent 사용하기

스크립트를 하나 만들어보고 Cube에 붙여봅니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //Transform 컴포넌트 얻어오기
        Transform myTransform = this.GetComponent<Transform>();

        //Transform 컴포넌트의 속성 정보 확인
        Vector3 postion = myTransform.position;
        Quaternion rotation = myTransform.rotation;
        Vector3 scale = myTransform.lossyScale;

        Debug.Log(postion);

        //Box Collider 컴포넌트 얻어오기
        BoxCollider boxCollider = this.GetComponent<BoxCollider>();

        //Box Collider의 isTrigger 속성 정보 확인
        bool trigger = boxCollider.isTrigger;

        //Box Collider의 isTrigger 속성 정보 변경
        boxCollider.isTrigger = true;
        

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

플레이를 누르면 아마 Position 값이 로그로 나타날것입니다.

this.GetComponent<Transform>() 좀 느낌이 오시나요? 

지금 객체에서 Transform의 컴포넌트를 얻어온다는 것입니다.

만약 Transform 컴포넌트가 객체에 등록되어있지 않다면 null에러가 나타나겠죠.

참고로 Transform은 모든 객체에 자동으로 등록되어있습니다. 삭제도 할수 없구요

그래서 Transform의 경우에는 GetComponent를 하지 않고 바로 접근이 가능합니다.

//위 예제 코드
Transform myTransform = this.GetComponent<Transform>();
Vector3 position = myTransform.position;

//아래처럼 생략하여 바로 접근 가능함
Vector3 position = transform.position;

위 코드 처럼 Transform은 항상 가지고 있기 때문에 'transform.속성정보'바로 접근이 가능하죠.

이렇게 컴포넌트를 가져와 특정 이벤트에 따라 속성들을 수정하고 삭제하고 하는 것이죠.

Inspector에서 보이는 속성정보들은 스크립트에서 대부분 접근이 가능합니다.

위 코드의 예제처럼 Transform을 가져와서 Transform.postion을 얻어올 수 있는 것처럼..

GetComponent에 관련된 함수는 아주 많습니다. 

아래는 GetComponent 관련 함수들입니다.

GetComponents<T>() 대상 오브젝트의 특정 컴포넌트들을 검색하여 모두 얻어온다.
GetComponentInChildren<T>() 대상 오브젝트를 포함한 하위 자식중에서 특정 컴포넌트를 검색하여 검색된 첫번째 자식 하나의 컴포넌트를 얻어온다.
GetComponentsInChildren<T>()  대상 오브젝트를 포함한 하위 자식들의 특정 컴포넌트들을 모두 얻어온다.
GetComponentInParent<T>()  대상 오브젝트를 포함한 부모들중에서 특정 컴포넌트를 가진 부모 하나의 컴포넌트를 얻어온다. 
GetComponentsInParent<T>() 대상 오브젝트를 포함한 부모들중에서 특정 컴포넌트들을 모두 얻어온다. 
#주의 : 모두 대상 오브젝트를 가장 먼저 검색하므로 대상 오브젝트가 검색되는 컴포넌트를 가지고 있는지 체크

 

다양한 컴포넌트들을 GetComponent해보고 속성들을 변경해보세요.

 

감사합니다.

반응형

댓글