[Unity] Generic 문법 / GetComponent로 오브젝트 색깔 바꾸기
2023. 8. 14. 14:16ㆍUnity
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
반응형
'Unity' 카테고리의 다른 글
[Unity] 오브젝트의 위치와 이동 (transform.position / transform.Translate / normalized) (1) | 2023.08.14 |
---|---|
[Unity] 변수를 보호하는 방법(캡슐화) - 접근 제한자 / 프로퍼티 (0) | 2023.08.14 |
[Unity] Enum / 키보드 입력(GetKey, GetButton) / 마우스 입력(GetMouseButton, 마우스 이벤트) (0) | 2023.08.11 |
[Unity] Time.deltaTime으로 깜빡이는 오브젝트 만들기 (0) | 2023.08.11 |
[Unity] 유니티 GameObject 클래스 정리 (0) | 2023.08.10 |