スクリプトを記述し、保存するとUnityのConsoleにエラーや警告文が出る事があります。
エラーに関しては必ず修正しないとスクリプトの実行は出来ませんが、警告文であれば動作はします。
ただし、どこかあいまいなスクリプトを組んでいたり、古い関数を使っていたりする事があるのと、スクリプトを保存した時にConsoleにズラズラ警告文が出るのはなんとなく嫌になります。
ひとつでも警告が表示されていたらどういった内容の警告が表示されているかを理解し消していく事が重要です。
Unityのスクリプトで出現する警告文の内容を見る
今回はわたくしのスクリプトで実際に警告文が出ている個所を修正してみます。
ダウンキャスト警告
まずは上のような警告です(C#だと出し方がわかりません)。
これはComponentからUI.Textにダウンキャストされていますよ!と警告されています。
ようは勝手にダウンキャストして使ってしまうけど大丈夫ですか?と聞かれているわけです。
この警告文が出るのは
1 2 3 | slotnum = obj[i].GetComponentInChildren(SlotNum); |
のような時です。slotnumはSlotNum型として変数宣言しています。
GetComponentInChildrenの戻り値はComponent型なので、本来であればComponent型からSlotNum型に変換しなければいけません。
が、わたくしはしていなかったので警告文が出ていました。
そこで自分でComponent型からSlotNum型に変換します。
1 2 3 | slotnum = obj[i].GetComponentInChildren(SlotNum) as SlotNum; |
as 型
と付け加えます。これでキャスト(型変換)が出来ます。
1 2 3 | (GameObject) |
等で値のキャストも出来ますが、キャストが出来なかった時にエラーになります。
asを使うとキャストが出来なかった時はnullを取得出来ます。
またキャストではなくジェネリックを使って型を指定して取得します。
1 2 3 | slotnum = obj[i].GetComponentInChildren<SlotNum>(); |
これで警告文が出なくなりました。
不思議な事に、GetComponentInChildrenでは警告が出来ますが、GetComponentでは出ません。
使用しているメソッドが古い
次は使用するメソッドが古い場合の警告です。
Application.LoadLevelは廃れてますよ!という警告です。
使えるんだからいいじゃないか!と思われますが、いつこの機能がなくなるかわかりません。
出来れば新しい機能の方を使っておけば、こちらが廃れるのは今使っている機能よりかは後になると思われます。
そこで警告文にあるとおり
SceneManager.LoadSceneを使ってみます。
が・・・、これ使うとSceneManagerなんてありませんとエラーになります。
こっちを使えと言うのに、そんなものありませんと言われてしまってはしょうがない。
Unityのスクリプトマニュアルを見てみます。
するとSceneManagerはUnityEngine.SceneManagementの中のクラスみたいです。
そこで
1 2 3 | SceneManagement.SceneManager.LoadScene("Scenes/Game"); |
としたら、エラーも警告も出なくなりました。
usingディレクティブを使って
1 2 3 | using UnityEngine.SceneManagement; |
を記述しておけば
1 2 3 | SceneManager.LoadScene ("Scenes/Game"); |
↑のようにSceneManagerクラスから記述出来ます。