2017-03-13 2 views
-1

어떤 구성 요소가 매개 변수로 사용되는지 확인하려고하지만 모든 오류가 발생하여 액세스하려고 시도하는 방법이 없습니다.일반 함수를 단일체로 사용하는 방법은 무엇입니까?

이 첫 번째 함수 인 AttemptMove는 레이 캐스트가 충돌하는 것을 감지합니다. 그런 다음 OnCantMove 함수를 호출하고 T를 매개 변수로 사용합니다.

protected virtual void AttemptMove<T> (int xDir, int yDir) where T: Component 
{ 
    RaycastHit2D hit; 
    bool canMove= Move (xDir, yDir, out hit); 
    if (hit.transform == null) 
     return; 

    T hitComponent = hit.transform.GetComponent<T>(); 
    //Debug.Log (hit.transform.GetComponent<T>()); 
    if (!canMove && hitComponent != null) 
     OnCantMove (hitComponent); 
} 

protected override void OnCantMove<T>(T component) 
{  
    Wall hitWall = component as Wall; 
    hitWall.DamageWall (wallDamage); 
    animator.SetTrigger ("PlayerChop"); 
} 

나는 적 플레이어에게 나는 T가 무엇인지 확인하기 위해 OnCantMove 기능에 체크의 일종을 할 수 있어야합니다, 그래서 나는 벽에 손상을 같은 방법으로 손상 될 수 있어야합니다. 나는 화합의 제네릭 함수에 익숙하지 않으므로 어떤 도움을 주시면 감사하겠습니다.

+1

를 사용하여 T 유형을 확인할 수 있나요? –

+2

'벽 hitWall = 벽으로 구성; 왜? 'protected override void OnCantMove (T 구성 요소)와 같은 것을 사용하지 마세요. T : Wall', [msdn] (https://msdn.microsoft.com/en-us/library/bb384067.aspx) - 두 번째 당신은이 접근법을 가지고 있다고 생각했습니다. 글쎄, 그냥 'as'로 캐스팅하면 null을 반환 할 수 있습니다. 재미있을 것입니다. –

+0

그럼'component.transform.tag'에서 디버깅 할 내용을 확인하려고했지만 콘솔에 아무 것도 보여주지 않았습니다 – Damian

답변

0

당신은 정확하게 오류가 무엇

Type itemType = typeof(T); 
if(itemType == typeof(int) || itemType == typeof(decimal)) 
+0

시도한 결과 작동하지 않는 것 같습니다 – Damian

+0

: 오류 CS0246 : 'Type'또는 유형의 네임 스페이스 이름을 사용할 수 있습니다. 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) – Damian

+0

- https://msdn.microsoft.com/en-us/library/system.type(v=vs.110).aspx를 참조하십시오. – SGRao

관련 문제