2016-03-27 3 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()); 
    } 
} 
Смежные вопросы