注:当ブログでは広告を利用しています。

Unity:ビルド後のNullreferエラー原因で2日間泣いた話

おはよう。もしあなたがUnityについて、
エディターではきちんと動くが、ビルド後にプレイするとヌルリファエラーを起こす。

ならぜひ読んでいってほしい。あまりにも単純な解決だった。

 

なぜ参照してくれないのか

自分がてんてこまいだったオブジェクトはGameManagerだった。

エディターではきちんと働くのに、ビルドになると一切働かない
音は出ないし、フェードも働かない。どうしたものか……。

 

エディターにあるのにビルドだと参照エラー

NullReferenceException: Object reference not set to an instance of an object
at StartManager.Start () [0x0000d] in D:\KiramekiUnity\sample\Kirameki4\Assets\Script\GManager\StartManager.cs:105

(Filename: D:/KiramekiUnity/sample/Kirameki4/Assets/Script/GManager/StartManager.cs Line: 105)

DirectoryNotFoundException: Could not find a part of the path “D:\KiramekiUnity\kansei\Kirameki4_Data\Save\LoadStart.json”.
at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00164] in <a3b02d6f9b494355b946095ea1f25c54>:0

Unityビルドのやり方は簡単だ。
ファイル>ビルドを開き「開発ビルド」にチェックマークをつければいい。
※英語だとDevelopment Build

加えてスクリプトデバッグにもチェックしておけばいい。

ビルド後のゲームをプレイすると、エラーが出たとき下に赤く表示される。
open Logをクリックするとメモ帳が開くので、すぐさま「名前を付けて保存」し、
デスクトップやダウンロードフォルダに保存すべき。

保存した一部のエラーが上にある。二つのエラーを太文字にした。

ゲームマネージャーも全てが働かないのでなく、一部が働く。
だからこそ悩んだ。色々スクリプトも変えた。

検索もしたが、一つも効果がなかったし、答えも出てこなかった。
本当に必要な情報(切羽詰まった悩み)ほど、検索に一切出てこない。

 

エラー状況をそのままメモしてたら…

検索しても出てこないので、自力で解決する以外ない。
今日、エラー状態をメモしているときだ。

nullエラーはエディターモードでは起こらない。ビルド後のみに起きる。

エディターではきちんと参照元があるのに、
ビルドすると「なぜか消える・消される・存在が初めからない」に変わる。

二つの間でどんなやりとりがなされているのか。

ゲームマネージャーオブジェクトには

  • フェードイン/アウトオブジェクト
  • BGM/SEオブジェクト
  • セーブ全般処理
  • その他

色々重要なものが詰まっている。

ゲームマネージャーオブジェクトにすべて包んでおり、
ヒエラルキーだと「canvas」が二つある。

ゲームマネージャー内に含まれたオブジェクトを、
上記ツイートのような形で親子関係にすれば普通に働く。

だからこそ問題の本質は一つ。

 

エディターで働くのにビルドだと消える

nullとエディター

原因が特定できたところで、何をしたらいいかわからない。
調べても出てこないのだから。

と、ゲームマネージャーオブジェクトを見ていたら、ある言葉が気になった。

 

タグ「EditorOnly」

私はタグでいろいろ分類するため、ゲームマネージャーはEditorOnlyに設定していた。
タグわけであり、特に意味はない。

EditorOnlyタグをUntaggedに変えたところ、普通に起動した
ゲームマネージャーオブジェクトも消えず、普通に働いた。

自分が「ジャンル別」に分けただけのタグによって2日間悩む原因を作ったわけだ。

 

エディタータグの働き

参照先を調べたところ、エディターオンリータグはビルド時、削除されると。
だから最初から存在がなかったのかと納得できた。

私のやることは一つ。

プレハブを開き、タグがeditorOnlyになっていないか確認」だ。
いくつかなっていたので、アンタグに変えた。

参照:[Unity] GameObject.tags に “EditorOnly” を設定するとビルドに入らない

 

追記:DirectoryNotFoundException対策

DirectoryNotFoundException: Could not find a part of the path “D:\KiramekiUnity\kansei\Kirameki4_Data\Save\LoadStart.json”.
at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00164] in <a3b02d6f9b494355b946095ea1f25c54>:0
at System.IO.FileStream..ctor

DirectoryNotFoundExceptionエラーについても書こう。

nullエラーと同じで「参照先がない」が原因だ。
解決はとても単純。

Could not find a part of the path “D:\KiramekiUnity\kansei(ビルド時に決めた、適当な名前)\Kirameki4_Data\Save\LoadStart.json”.

〇〇_Dataはビルド後に必ず出るフォルダだ。
下記フォルダにSave以降のフォルダ・ファイルがないよと示してる。

Assetフォルダ内にあるSaveフォルダを〇〇_Dataを開けた先に入れればいい

ただしこのやり方はWindows,Macとスタンドアロンでしか効果がない。
WebGLだと普通にエラーを起こす。

 

追記2:FPSが原因でビルド後のゲームだと座標移動が遅い

強制スクロールステージをやっているとき、
エディターに比べてビルド時の座標移動速度が遅いと分かった。

私のツイートのように、FPSをこちらで設定し、
座標移動を分けてあげなければならぬ。

スマートフォンは30FPS(カクカクする)に設定した。
60でもいいが、60だとスマホが熱くなり壊れやすくなる。

※原神は60FPS固定であり、専門のクーラーをつけて遊ぶ人が多い

クーラー:Hudifeni スマホクーラー ファン ペルチェ素子 3秒急速冷却

ぜひ参考にしてほしい。

自分は少しカクカクしてもいいから、あまり熱を持たせないよう配慮した。
とはいえ、まだスマホで出していないが……。

参照:unityフレームレート固定と端末計測

※またエラーなど報告があったら追加する。

お願い

めがびちゃんからお知らせ♪

お知らせ

megabe-0へ訪問した"本当"の理由

まさか記事の書き形一つでこうなるとは…

お願い1

Writer軽い自己紹介

ティラノスクリプトや小説家になろう、ピクシブ他で物語を書きながら、 「私が気になった事件」の裏側を作家の視点で書いているおっさん。

プロフィール画像は自画像でなく、Megabe-0ブログのマスコット、めがびちゃん。

 

雷が苦手で、光を見ると頭が固まる(元から固い)。 月初めは墓参りと神社参拝を行い、賽銭箱へ1万円を入れた際、とても気持ちがすっきりした。

 

■ 簡単な自分史 ■

0歳:釧路のある病院で生まれる。暇さえあれば母乳を吸って、ご飯を4膳食べても体重が落ちるほど、母のダイエットにものすごく貢献したらしい

 

3歳:行方不明になり、全裸で海を泳ごうとしたところ、いとこのお姉さんに発見され、この世へ留まる

 

8歳:自分のお金でおもちゃのカードを初めて買い、経済を知る。なぜか父親に怒られ、家出するがすぐに見つかる。

 

12歳:学校で給食委員長になる。委員長として初めて全校生徒の前にて演説する際、原稿用紙を忘れてアドリブで笑いを誘いながらも何とかやり過ごし、多くの生徒に名前と顔を覚えてもらう。また、運動会の騎馬戦では変なアドリブを行い、多くの笑いを誘った。

 

18歳:初めて好きな人ができたけれど、告白が恥ずかしくてついにできず、別れたことを今でも根に持っている(妻となる人にははっきり言えてよかった)

 

21歳:大学在学中、アルバイトを始める。人手不足かつとても忙しい日々を過ごしながら「どうせなら自分から楽しいことをしていきたいなあ⇒起業って選択肢があるのか」働き方の選択肢を見つける

 

27歳:自分で作った会社がうまくいかず、一度たたんで都落ち。実家でとことん自分を責める日が続く。「何をやっても駄目だな、お前は」など。自分を責めても自殺ができず、体中から毒素があふれ出て苦しい日々を送る。寝るのも怖かった日々。

 

28歳:「このままじゃいけない」決心を決め、小学校からの勉強をやり直す。高校の勉強で躓きながらも、学び直すうちに「自分は何もわかっていなかったんだなあ」大切な教えに気づかされる。 加えて、小説やイラストなど「今までの自分が手を出さなかった分野」に手を伸ばしてみた。

 

29歳:「定義」と「自己肯定」こそが生き方を決めると気づかされ、不安な日々が起きても、心が強くなったと感じる。でも子供の誘惑にはめっぽう弱くなる。

 

35歳:人生初の交通事故(物損)に出会う。冬道の運転で車を上下に大回転(スピンではない)を体型氏、何とか命を取り留め、なぜ生きているのかわからない状態に陥る。

自分の生き方はすべて自分が握っている。わずかな瞬間にしか現れない「自分の真実」を表に引きずり出し、ピンチからチャンスを生み出す発想や視点をブログやメルマガ他で提供中。