나는 Unity로 RTS 게임을 만들고 있습니다. 내 게임에는 트리, 팜과 같은 다양한 유형의 리소스가 있습니다. 각 리소스는 GameObject이며이를 제어하는 메인 스크립트를 소유하고 있습니다.일반 메서드 호출은 다른 일반 메서드 내에서 허용됩니까?
Ex. 나는 나무를 수확하고 싶다. 나는 이것을 부른다.
gameObject.GetComponent<Tree>().Harvest();
팜을 수확하려면 동일한 스크립트를 호출하지만 "트리"를 "팜"으로 변경하면되지만 "코드"는 복제됩니다. 그래서 저는 이것을 generics method를 사용하여 추상화합니다.
void Harvest<T>(){
gameObject.GetComponent<T>().Harvest();
}
하지만 C# 컴파일러는 그렇게 할 수 없습니다. 제네릭 메소드를 내부에서 사용하는 제네릭 메소드를 정의하는 것이 가능한지 알고 싶습니다. 그렇지 않다면 이런 식으로 내 코드를 추상화 할 수있는 방법이 있습니까? 고맙습니다.
는오류 메시지 :
'T'는 '수확'에 대한 정의없이 확장 메서드 '수확'유형 'T'의 첫 번째 인수를 받아들이는 포함되어 있지 않습니다를 볼 수 있습니다 (당신은 사용하여 누락 지시문 또는 어셈블리 참조?) 어셈블리 CSHARP]
"저를 그렇게시키지 않을 것입니다"라고 말하면 확실하지 않습니다. * 특정 * ... 오류 메시지? 예를 들어'GetComponent'에 제약이 있습니까? –
또한 ** 모든 ** 유형에는'.Harvest' 메소드가 있습니까? 확장 방법입니까? 그렇지 않으면'void Harvest()와 같은 'Harvest' 메소드를 제공하는 인터페이스를 구현하는 T를 허용하는 것과 같이 제약 조건을 직접 추가해야합니다. T : IHarvestable {...' –
오류 메시지 덧붙였다. @ LasseVågsætherKarlsen. –