Unityのコンソールに表示されるスクリプトの警告文の内容を見て修正する

スクリプトを記述し、保存するとUnityのConsoleにエラーや警告文が出る事があります。
エラーに関しては必ず修正しないとスクリプトの実行は出来ませんが、警告文であれば動作はします。

ただし、どこかあいまいなスクリプトを組んでいたり、古い関数を使っていたりする事があるのと、スクリプトを保存した時にConsoleにズラズラ警告文が出るのはなんとなく嫌になります。

スポンサーリンク

Unityのスクリプトで出現する警告文の内容を見る

今回はわたくしのスクリプトで実際に警告文が出ている個所を修正してみます。

キャスト1

まずは上のような警告です。
これはComponentからUI.Textにダウンキャストされていますよ!と警告されています。
ようは勝手にダウンキャストして使ってしまうけど大丈夫ですか?と聞かれているわけです。

この警告文が出るのは

slotnum = obj[i].GetComponentInChildren(SlotNum);

のような時です。slotnumはSlotNum型として変数宣言しています。
GetComponentInChildrenの戻り値はComponent型なので、本来であればComponent型からSlotNum型に変換しなければいけません。

が、わたくしはしていなかったので警告文が出ていました。
そこで自分でComponent型からSlotNum型に変換します。

slotnum = obj[i].GetComponentInChildren(SlotNum) as SlotNum;

javascriptを使ってスクリプトを書いている方は最後に

as 型

と付け加えます。これでキャスト(型変換)が出来ます。
これで警告文が出なくなりました。
不思議な事に、GetComponentInChildrenでは警告が出来ますが、GetComponentでは出ません。

次は使用する関数が古い場合の警告です。

old1

Application.LoadLevelは廃れてますよ!という警告です。
使えるんだからいいじゃないか!と思われますが、いつこの機能がなくなるかわかりません。
出来れば新しい機能の方を使っておけば、こちらが廃れるのは今使っている機能よりかは後になると思われます。

そこで警告文にあるとおり

SceneManager.LoadSceneを使ってみます。

が・・・、これ使うとSceneManagerなんてありませんとエラーになります。

エラー1

こっちを使えと言うのに、そんなものありませんと言われてしまってはしょうがない。
Unityのスクリプトマニュアルを見てみます。
するとSceneManagerはUnityEngine.SceneManagementの中のクラスみたいです。
そこで

SceneManagement.SceneManager.LoadScene(“Scenes/Game”);

としたら、エラーも警告も出なくなりました。

Unityでは基本C#っぽいので、JavaScriptで同じように記述しようとしても動作しなかったりします。

だいたいが使用するクラスの指定だと思いますが・・・。

JavaScriptで出来ない部分はC#で作るのも手ですね。
というよりC#使った方がいいのかも・・・・(^_^;)