私は3つのタイプのボール(A、B、C)すべてがMotherBallを継承しています。実際にタイプがわからずに名前付きGetComponentを使用して関数を呼び出す
私はballtypeでボールを取得することができ、それはそれは、スクリプト(AScript、BScriptまたはます。CScript)だ含まれていますObjectPool
は状況が私がランダムにオブジェクトプールからボールを取るだろう、と私は私がすることを願っているがありますそれを別の関数で扱わないでください。 以下のコードのような設定機能を呼び出す方法はありますか?私は多分一般的であると思っています、あるいは代議員がそれをぶつけることができます、あるいは私は3つの機能を書く必要があります。 ありがとうございます。 P.S申し訳ありませんが私の英語は貧しいです、私は私の問題を正確に記述することはできません。
public void OneBallFire(string ballType){
GameObject ball = ballPool.GetObjectFromPool (ballType);
//I can't cast AScript, BScript or Motherball.
MotherBall ballScript = ball.transform.GetComponent (ballType) as MotherBall;
ballScript.Setting();
}
public class MotherBall : MonoBehaviour{
public virtual void Setting() {
//Do nothing
}
}
public class AScript : MotherBall {
public void Setting(){
Debug.Log("Do A plan");
}
}
public class BScript : MotherBall {
public void Setting(){
Debug.Log("Do B plan");
}
}
OneBallFire(RandomGetAorBorC());
string RandomGetAorBorC(){
//random return "AScript, BScript or CString" string.
}
は、なぜあなたはMotherBallにオブジェクトをキャストしていますか? – PMerlet
キャストが間違っています。 '_ball'が**ではない場合、' MotherBall'は 'NullReferenceException'を取得します。 '_ball'が常に' MotherBall'ならば、なぜそれをキャストするのですか? – BanksySan
私はキャストが間違っていることを知っていますが、私のプログラムでOneBallFire()のパラメータがランダム(いつかはいつかa、ある時はb)なので、AScriptまたはBScriptにキャストできません。すべての設定機能は別のことを行います。そして、私はそれをスローするために1つの機能を使いたいだけです。 –