私はUnityでRTSゲームを作っています。私のゲームには、木、農場など、多くの種類のリソースがあります。各リソースはGameObjectであり、それを制御する主なスクリプトを持っています。ジェネリックメソッドの呼び出しは、別のジェネリックメソッド内で許可されていますか?
Ex。私は木を収穫したい、私はこれを呼ぶ。
gameObject.GetComponent<Tree>().Harvest();
ファームを収穫したい場合は、同じスクリプトを呼び出しますが、「ツリー」を「ファーム」に変更しても問題ありませんが、コードは複製されます。だから私はこのようなジェネリックメソッドを使って抽象化します。
void Harvest<T>(){
gameObject.GetComponent<T>().Harvest();
}
しかし、C#コンパイラは私にそれをさせません。ジェネリックメソッドを内部で使用するジェネリックメソッドを定義することは可能ですか?そうでなければ、このようなコードを抽象化する方法はありますか?ありがとうございました。
はエラーメッセージ :
「T」「収穫」の定義なし拡張メソッド「収穫」がタイプ「T」の最初の引数を受け入れるが含まれていませんが、見つけることができる(あなたが使用して不足していますディレクティブまたはアセンブリ参照?)[アセンブリ-CSHARP]
「私にそれをさせません」、あなたは確かにあなたにもっと... *特定の* ...エラーメッセージを与えませんか?例えばGetComponentに制約がありますか? –
さらに、**すべて**タイプは '.Harvest'メソッドを持っていますか?それは拡張メソッドですか?さもなければ、 'Harvest'メソッド(void Harvest()など)を提供するインターフェースを実装するTを許可するなど、自分で制約を追加する必要があります。T:IHarvestable {...' –
エラーメッセージ追加されました。 @LasseVågsætherカールセン。 –