ゲームを作る際に頻出する、~秒後に〇〇して、それから更に~秒後に△△みたいに、時間単位で細かく管理したい挙動について、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;
を消さない。もし消してるなら書き足せ。
というお話でした。
本当の初心者には、こんなことも解らないものなんですよ……