2017-02-07 11 views
2

私は2D RPGで作業しています。クラス「BaseEnemy」をゲーム内のすべての敵に適用しています。それは、そのstat定義、すべての敵が共有する基本関数などを含んでいます。各敵は独自のスクリプトを取得し、BaseEnemyクラスを継承し、BaseEnemyコンストラクタを使用してstatを設定します。クラスを継承したnon-monodevelopクラスを第3クラスから見つける方法

public class LesserSlime : MonoBehaviour { 

public BaseEnemy myEnemy = new BaseEnemy(1, 5, 5, 5, 5, 5, 5, 5); 
public EnemyHealthBar myHealthBar; 

// Use this for initialization 
void Start() { 
    myEnemy.IsSelected = false;   
} 

私の問題は、私はターン処理のための一般的な戦いコントローラをしようと、戦闘の開始時に初期化されたときには、タグ付けされたすべてのゲームオブジェクトの配列「敵を作るこれ、選択された敵を見つけ出すよです彼らはそれらに異なる敵のスクリプトを持っているかもしれないので1がスライムかもしれ(各indiviual敵のためにBaseEnemy 『:"開始時に

public class BattleController : MonoBehaviour { 

public GameObject[] Enemies; 

私の問題があるからである私がアクセスする方法がわかりません』、 1つは妖精かもしれないなど)が、すべてBaseEnemyクラスの独自のインスタンスを呼び出します。とにかく、私はBattleControllerクラスからそれらのアクセスを見つけることができますか?これについて別の方法で進むべきでしょうか?

+2

のようにアクセスすることができBaseUnityEnemyクラスを作りますちょうど不思議なことに、なぜあなたは敵の授業をしないのですか? BaseEnemyから継承し、次にBaseEnemyをMonoBehaviourから継承させますか?そうすれば、どの敵タイプであろうと、 'GetComponent ()'を使うことができます。 – Serlite

+0

私は...私はそれを行うことができたことを理解していませんでした。ありがとう! 編集: このエラーが発生しました。「あなたは 'new'キーワードを使用してMonoBehaviourを作成しようとしています。これは許可されていません。MonoBehavioursは、AddComponent()を使用してのみ追加できます。代わりに、あなたのスクリプトはScriptableObjectか基本クラスを継承することができません " 私はAddComponentを使用すると、コンストラクタを呼び出して基本統計情報を設定することはできません、いいえ? – Daymare

+0

あなたはそうではありませんBaseEnemyをMonoBehaviourから継承させると、コンストラクタを呼び出すことができますが、これはうまくいきます。Start()メソッドで必要な値を設定するだけで、コードなしのアプローチを取ることもできます:それらを表示するためにシリアライズされたものとしてマークする必要があります)。 – Serlite

答えて

1

オプション#1

あなたはこのような

public interface IEnemy { 
    BaseEnemy GetBase(); 
} 

としてインターフェイスを作成し、その後、敵のクラスを持っている

public class Slime : MonoBehaviour, IEnemy 

それを継承し、その後、あなたは戦いから、このようにアクセスすることができますコントローラ

Enemies[x].GetComponent<IEnemy>().GetBase(); 
あなたはBaseEnemyがMonobehaviour

pubilc class BaseEnemy : MonoBehaviour 

を継承させることができ、その後、敵がちょうどBaseEnemy

public class Slime : BaseEnemy 

を継承し、この

Enemies[x].GetComponent<BaseEnemy>() 
のようにアクセス

オプション#2

オプション#3

あなたは

public class BaseUnityEnemy : MonoBehaviour { 
    public BaseEnemy myEnemy; 
    public EnemyHealthBar myHealthBar; 
} 

が続いてすべての敵が

public class LesserSlime : BaseUnityEnemy { 

    // Use this for initialization 
    void Start() { 
     myEnemy = new BaseEnemy(1, 5, 5, 5, 5, 5, 5, 5); 
     myEnemy.IsSelected = false;   
    } 
} 

ことを継承しているそして、あなたがそう

Enemies[x].GetComponent<BaseUnityEnemy>().myEnemy 
関連する問題