質問: 0) { StartCoroutine(secondTask()); } ......他の処理...... loop++; } IEnumerator secondTask() { while (true) { //ここに他の処理が書きたい yield return null; } } ``` ### 試したこと secondTaskを一度呼べばいいと思ったので、UpdateではなくStart内で始める手も試しましたが、同様にエラーが発生しました。 ### 追記 更に調べてみたところ、どうやらこのScriptをGameObjectにアタッチせず、他のScript(こちらはアタッチされている)からnewで呼び出しているのが原因かもしれないとわかってきました。 しかし、このScriptは引数を持つのですが、単純に新しいGameObjectをつくり、AddComponentでアタッチするのでは引数が渡せません。 質問内容は異なりますが、こちらの方法を試してみるため、適切なやり方を教えていただけないでしょうか。
回答: Manager.cs内でStartCoroutine(panelChange());している とありますが、これだと 「Manager.cs内のpanelChangeメソッド」を呼ぼうとします。 Manager.cs内にpanelChangeメソッドが無い場合、当然エラーを返します。 もし「該当のソースコード」に当たるCSファイルが別にあり、そのメソッドを呼ぼうとしているならば `StartCoroutine(該当のソースコードクラスのインスタンス.panelChange());` のような形にしないと呼び出されません。 (「該当のソースコード」に当たるCS内にpanelChangeメソッドが存在する必要があります) (ここが解決されればStart内でも呼べるはずです) 何をしたいのかよく分かりませんが、 AddComponentでアタッチしたスクリプトへ変数を渡したいなら、以下の方法で可能です ``` //呼び出し側(Manager.cs)---------------------- void CallHoge () { Hoge hoge = gameObject.AddComponent( typeof(Hoge) ) as Hoge; hoge.aaa = 1; //public変数に入れてから hoge.DoAAA(); //メソッドを呼び出すとか hoge.DoBBB (2); //メソッドで引数を渡せるようにするとか } //呼び出され側(Hoge.cs)------------------------ public int aaa = 0; public void DoAAA() { Debug.Log(aaa); //渡された変数を使った処理 } public void DoBBB (int num) { Debug.Log(num); //渡された変数を使った処理 } ```