【Unity】エディタと実機で挙動が違う…確認したいポイント4選

Unityで実機ビルドを行ってテストする時、エディタと挙動が違うことがありませんか。

私もUnityでスマホ向けのアプリを作成しているときにエディタでは動いていたのに

実機にビルドすると画面が表示されなかったり、エディタでは出ていないエラーが出たりして

頭を抱えたことがあります。

そのようなときに確認したいポイントをまとめたので紹介していきたいと思います。

目次

実機でログを出そう

1つ目のポイントは実機でログを出すことです。

エディタではエラーが発生した時はログに出てくれますが、

実機の場合だと初期状態ではログが出てくれません。

そこで、実機でもログを出してエラーの原因を特定しやすくしましょう。

実機でログを出す方法は下記記事が参考になります。

【Android】

【iOS】

上記の記事を参考に設定すると実機でログが出るようになります。

こちらで挙動が違うときにエラーログが出てきてくれます。

UIの表示を見直そう

2つ目のポイントはUIの表示を見直すことです。

下記のエラーの記事でも紹介しましたが、エディタでは画面が表示されているのに、

実機では表示されないことがありました。

その時に下記の記事のエラーが出現しました。

こちらの原因はリビルドループという

画面の再描写のタイミングでUIのONOFFが頻繁に行われているため

画面が上手く表示されていませんでした。

こちらのリビルドループは実機にビルドすると起こるので、

UI表示のタイミングを考える必要がありそうです。

コルーチンや非同期処理を使って画面表示のタイミングを遅らせる

1フレームで一気に画面を表示するとエラーが起こりやすいので、

コルーチンや非同期処理を使ってフレームを遅らせるのが良さそうです。

Canvasを分割する

Canvasの中にCanvasを作成し、Canvasを分割すると

リビルドエラーの発生を抑えることができます。

保存時のファイルパスを見直そう

3つ目は保存時のファイルパスを見直すことです。

Unityでアプリにファイルの保存を行いたいとします。

アプリをAndroidやiPhoneにビルドした時、保存される場所を把握しているでしょうか。

AndroidやiPhoneにファイルを保存する時は

Application.persistentDataPathを使うと良いです。

こちらを使ってパス指定した場合ですが、AndroidとiPhoneで指定される場所が異なります。

【Android】

/storage/emulated/<userid>/Android/data/<packagename>/files 

【iOS】

/var/mobile/Containers/Data/Application/<guid>/Documents

以上がパスになります。

Application.persistentDataPathを使ってファイルを保存したら、

PCと実機をつないで確認してもらうとわかると思います。

ScriptableObjectを見直そう

4つ目のポイントはScriptableObjectを見直すことです。

ScriptableObjectはUnityで使えるデータベースだと理解している方が多いと思いますが、

実はScriptableObjectはエディタと実機で挙動が異なることがあることを知っているでしょうか。

なんと実機ではScriptableObjectで保存した値はゲーム終了時に初期化されてしまいます

私もこちらの仕様を知らずにScriptableObjectを使用しており

実機テストを行ったときに挙動が違うと困ったことがありました。

値を保持したいときはScriptableObjectではなく、Jsonを使った保存形式にするのがよいです。

おわりに

いかがだったでしょうか。

Unityエディタでは動作していたのに実機にビルドして動作しなくなった…

ということはよく起こることだと思います。

今回紹介した点を踏まえてデバッグを行ってもらえたらと思います。

ではでは!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

電気制御設計→ITエンジニア
前職は電気系のエンジニアで物流倉庫などの設備を動かしていました。
現在はITエンジニアとして開発に従事。
業務では主にUnity、C#、.NETを利用。
現在、UnityとC#を用いて業務用スマホアプリを開発中。

コメント

コメントする

目次