[Unity] Generic 문법 / GetComponent로 오브젝트 색깔 바꾸기

2023. 8. 14. 14:16Unity

728x90
반응형

함수 오버로딩을 통해 int, float 등 형에 상관 없이 사용할 수 있다. 하지만 모든 함수에 오버로딩을 하기에는 불가능하기 때문에 Generic을 사용한다.

public class TestGeneric
{
    public T GenericMethod<T>(T param)
    {
        return param;
    }
}

T는 임의의 타입이며 <T>로 T 타입을 사용할 것임을 알려준다. (T param)의 T는 입력 파라미터 타입의 T이다.

T를 이용한 함수 하나만 만들어두면 어떤 데이터 타입으로도 사용될 수 있다.

 

 

public class Test : MonoBehaviour
{
    public class TestClass
    {
        public int TestFunc(int param)
        {
            return param;
        }
        public float TestFunc(float param)
        {
            return param;
        }
        public T Gmethod<T>(T param)
        {
            return param;
        }
    }
    void Start()
    {
        TestClass c = new TestClass();
        int a = c.TestFunc(1);
        print(a);
        float b = c.TestFunc(2.3f);
        print(b);

        int d = c.Gmethod<int>(10);
        print(d);
        float e = c.Gmethod<float>(10.1f);
        print(e);
        long f = c.Gmethod<long>(100L);
        print(f);
    }
}

원래는 class 안에서 int, float를 지정했지만, T를 사용하면서 <int>, <float>으로 형을 직접 지정하여 자유롭게 사용할 수 있게 되었다. 내부 컴파일러에서는 각각 지정하는 방법과 동일하게 돌아간다.

 

 


 

 

유니티에서는

MeshRenderer m = GetComponent<MeshRenderer>();
SpriteRenderer spr = GetComponent<SpriteRendere>();

위와 같이 쓸 수 있으며 GetComponent가 Generic 함수이기 때문에 <> 괄호 안의 내용을 불러올 수 있는 것이다.

 

 

void Start()
{
    MeshRenderer rend = GetComponent<MeshRenderer>();
    rend.material.color = new Color(1, 0, 0, 1);
}
public class Test : MonoBehaviour
{
    MeshRenderer render;
    void Start()
    {
        render = GetComponent<MeshRenderer>();
    }
    void Update()
    {
        float r = Random.Range(0, 1.0f);
        render.material.color = new Color(r, 0, 0, 1);
    }
}

위의 코드로 오브젝트의 색을 바꿀 수 있다. 랜덤한 색으로도 지속적 변경이 가능하다.

728x90
반응형