2016-03-27 12 views
0

私はserializable(インスペクタのいくつかのパブリック変数を見る)をしたいクラスがありますが、そのクラスにCoroutinesも使用する必要があります。私のクラスでCoroutinesを使用するには、MonoBehaviourから継承する必要があります。しかし、私はserializableクラスの機能を使用することはできません。コルーチン付きのシリアライズ可能クラス?

public class Act1HomeAwake : MonoBehaviour 
{ 
    public Act1_1HomeAwake act1_1HomeAwake; 

    public void StartAct1(int subActNumber) 
    { 
     switch(subActNumber) 
     { 
      case 1: act1_1HomeAwake.StartSubAct1_1(); break; 
     }      
    } 
} 

[System.Serializable] 
public class Act1_1HomeAwake // : MonoBehaviour 
{ 
    // don't see this 2 variables in the inspector WITH inheriting from MonoBehaviour 
    public OpenCloseAnimation openCloseEyesScript; 
    public Text textTipsTasksComponent; 

    // WITHOUT inheriting from MonoBehaviour compiler don't understand this construction 
    StartCoroutine("OpenCloseEyesAnimation"); 
} 
+0

コードは有効ではありません。C#?任意のクラスメンバーの外部からメソッドを呼び出そうとしています。 –

答えて

1

あなたが表示したいクラスシリアライズする必要があります。

[Serializable] // this is needed to show the object in Inspector 
public class OpenCloseAnimation {} 

[Serializable] 
public class Act1_1HomeAwake 
{ 
    public OpenCloseAnimation openCloseEyesScript; 
    public void CallCoroutine(MonoBehaviour mb) 
    { 
     mb.StartCoroutine(OpenCloseEyesAnimation()); 
    } 
    public IEnumerator OpenCloseEyesAnimation(){ yield return null;} 
} 

をしかし、多分あなたは間違ってそれをやっていると思います。クラスにコルーチンが必要な場合は、おそらくMonoBehaviourを意味します。他の方法は、オブジェクトを含むMonoBehaviourからコルーチンを開始することです。

public class MbClass : MonoBehaviour 
{ 
    public Act1_1HomeAwake homeAwake; 
    void Start(){ 
     // Considering you don't pass the MB in ctor anymore. 
     this.homeAwake = new Act1_1HomeAwake(); 
     StartCoroutine(this.homeAwake.OpenCloseEyesAnimation()); 
    } 
} 
関連する問題