· 

【Unity】初心者が陥ったコルーチンのエラーについて


 

 ゲームを作る際に頻出する、~秒後に〇〇して、それから更に~秒後に△△みたいに、時間単位で細かく管理したい挙動について、UnityではコルーチンかInvokeなる方法を使うのがいいらしい。

 

 というのが今回の発端。 

 

 実際に、自分もラウンドコールの実装時に使ってたりするんですが、今回別の演出を作ろうと思って、新しいスクリプトを追加してたら陥った問題と、その原因について残しておきます。

 

 本当に些細なことなんですが、自分が調べた範囲ではどこのサイトにも言及なかったですし、こんなことで自分と同じようなキャリアの方が、躓いたり、時間を浪費するのは本当に良くないと思いましたので。

 


起きた問題

IEnumerator ~() を定義して、条件を満たしたら StartCoroutine()で呼ぶ、というテンプレの動きを組んでみたところ

error CS0246: The type or namespace name  IEnumerator~  Could not be found. 

 赤エラーでCS0246。要約すると『そんな名前のスペースは存在しねーぞ』

 

この場合、大体はスペルミスかタイプミスが原因なので、記述に何度も間違いがないのを確認してから再度実行。

 

 「綴りとか間違ってないし、ちゃんと定義してるんだけど(´・ω・`)」

 

 『存在してねーっつってんだろバーカ』

 

という状態が続きます。泣きそう。

 


原因

 結論からいうと、スクリプトの本当に最初の最初にある

using System.Collections; 

 これを消していたのが原因でした。

 

 サンプルで MonoBehaviour が書いてある行よりも上が省略されてるケースは多く

 

using UnityEngine;

 

 としか書かれてないパターンもあり、そもそも『usingSystem~』の部分が何なのかを解説してるサイト自体が少なかったです。

 

 コルーチンで使用する『IEnumerator』は SystemCollectionsの機能なので、ちゃんと冒頭で使うって宣言しないと使えませんよ、という話だったんですね。たぶん。


解決方法

というわけで、コルーチンを使うスプリクトは

 

using System.Collections;

 

を消さない。もし消してるなら書き足せ。

というお話でした。

 

 本当の初心者には、こんなことも解らないものなんですよ……