2017-03-13 4 views
-1

どのコンポーネントがパラメータとして使用されているかを判断しようとしていますが、すべてがエラーをスローするので、アクセスしようとする手がかりがありません。ジェネリック関数を統一的に使用するには?

この第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

あなたは正確にエラーとは何

​​
+0

これを試してみましたが、 – Damian

+0

が動作しているようです:CS0246:タイプまたは名前空間の名前 'タイプ'使用されていないディレクティブまたはアセンブリ参照がありませんか? – Damian

+0

- https://msdn.microsoft.com/en-us/library/system.type(v=vs.110).aspxを参照してください。 – SGRao

関連する問題