2024년 5월 27일 월요일 개발일지 / GetComponent에 대해서

2024. 5. 27. 21:03나의 개발자 기록/본 캠프 개발 일지

2024년 5월 27일 월요일


What I did today

 

 

저는 주말에 지급받았던 강의의 내용 중 플레이어와 관련된 강의까지 공부했었기 때문에, 오늘은 남은 강의인 조명, 낮과 밤, 아이템과 상호작용, 인벤토리 기능, 적 생성과 로직 등등의 내용들을 보고 실습하면서 공부했습니다. 새로운 내용들이 너무 많고, 강의를 정주행해서 그런지 머리가 아프고 개발자의 길이 멀어만 보이네요.

 

 

그래도 지금까지 하면서 아무것도 몰랐던 제가 다양하게 만들어 볼 수 있다는 사실이 참 뿌듯하기도하고, 아직 배워야 할 내용들과 공부 및 복습해야 할 내용들이 산더미이기 때문에 더욱 열심히 해야 될 것 같습니다.

 

이번 강의에는 개인적으로 저번 주에 하던 것보다 내용이 어렵고 복잡하기 때문에 자주 복습을 해줘야할 것 같습니다. 그중 하나의 일환으로 써 TIL에도 유니티의 다양한 기능을 하나씩 복기해 보면서 복습하는 시간도 갖고, 이번 개인 과제의 필수 구현이 강의를 중심으로 구현할 수 있는 내용들이기 때문에 내일부터 강의를 복습하면서 개인 과제 구현에 힘써볼 생각입니다. 저녁을 먹고 난 후, 저는 개인 과제에 대한 Github 세팅과 기본 세팅을 하고, TIL을 쓰면서 복습하고 오늘 하루를 마무리했습니다.


GetComponent에 대해서

 

GetComponent란?

// 유니티에서 제공하는 모든 컴포넌트 타입과 사용자 정의 컴포넌트 타입(스크립트 등등)
GetComponent<컴포넌트 타입>();

// 스프라이트 렌더러를 가져오는 GetComponent 예시
public SpriteRenderer spriteRenderer;

private void Start()
{
    spriteRenderer = GetComponent<SpriteRenderer>();  
}

 

- 유니티에서 특정 게임 오브젝트에 첨부된 컴포넌트를 가져오는 데 사용되는 매우 유용한 메서드이다.

- 이 메서드는 다양한 유형의 컴포넌트에 접근할 수 있게 해 주며, 게임 오브젝트의 기능을 확장하고 상호작용할 때 자주 사용된다.


주요 특징

 

GetComponent를 사용해서 Rigidbody2D의 컴포넌트를 스크립트에서 다룰 수 있음

 

1. 컴포넌트 접근: 게임 오브젝트에 첨부된 특정 타입의 컴포넌트를 가져올 수 있다.

2. 다양한 타입 지원: 유니티에서 제공하는 모든 컴포넌트 타입과 사용자 정의 컴포넌트 타입에 대해 작동한다.

3. 성능 주의: 빈번한 호출 시 성능에 영향을 줄 수 있으므로 캐싱을 고려해야 한다.


사용 방법

 

1. 특정 타입의 컴포넌트 가져오기

가장 일반적인 사용 방법은 게임 오브젝트에서 특정 타입의 컴포넌트를 가져오는 것이다.

using UnityEngine;

public class Example : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }
}

 

위의 예제에서 GetComponent<Rigidbody>()Example 스크립트가 부착된 게임 오브젝트에 있는 Rigidbody 컴포넌트를 가져온다.

 


2. 자식 게임 오브젝트에서 컴포넌트 가져오기

GetComponentInChildren 메서드를 사용하면 자식 게임 오브젝트에 있는 컴포넌트도 가져올 수 있다.

using UnityEngine;

public class Example : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponentInChildren<Rigidbody>();
    }
}

 


3. 부모 게임 오브젝트에서 컴포넌트 가져오기

GetComponentInParent 메서드를 사용하면 부모 게임 오브젝트에 있는 컴포넌트를 가져올 수 있다.

using UnityEngine;

public class Example : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponentInParent<Rigidbody>();
    }
}

 


캐싱

 

GetComponent 는 런타임에 비교적 비용이 많이 드는 작업입니다. 따라서 자주 사용되는 컴포넌트는 StartAwake 메서드에서 한 번 가져와서 캐싱하는 것이 좋다.

using UnityEngine;

public class Example : MonoBehaviour
{
    private Renderer rend;

    void Awake()
    {
        rend = GetComponent<Renderer>();
    }

    void Update()
    {
        if (rend != null)
        {
            rend.material.color = Color.green;
        }
    }
}