Unity自体のバグが原因で生じる不具合
投稿日:2019年6月6日 | 最終更新日:2024年6月27日
ここでは、Unity自体のバグが原因で生じる不具合についてまとめます。
宴4以降、Unity2021.3以降、宴3.11以降では解消ずみです。(LTSになる前の最新バージョンのUnityに関しては、最新バージョンの宴にするか、Q&Aにお問い合わせください)
古いバージョンのUnity自体にバグがある場合があり、その機能は動作しなくなってしまいます。
安定性を求めるのであればLTS(ロングタイムサポート)というバージョンを使うことをお勧めします。
Unityは、その年の最後のバージョン(2018なら2018.4)がLTSとなり、安定版となっています。
LTSについて、詳細はこちらです。Unity の新しいリリースプラン:TECH ストリームと長期サポート(LTS)ストリームの導入
ただし、Unity2018.4.9のようにLTSであっても致命的なバグが発生するケースがありますので、その場合はそのバージョンを避けてください。
以下、特定のバージョンのUnityで生じる不具合をまとめてあります。
目次
- 1 Unity2020.2~ で、SenarioDataBuilderで、インポート対象の編集ができない
- 2 Unity2018.4.20~Unity2018.4.24で、宴の新規プロジェクト作成時に「test」と入力すると、Unityがクラッシュする
- 3 Unity2018.1~2019.2で、一部の端末でDateTime.Nowを呼びだすと例外エラー(TimeZoneNotFoundException)が起きる
- 4 Unity2019.3.6より前で、アセットバンドル化したサウンドでフリーズする不具合
- 5 Unity2018.4.9~2018.4.10(LTS)で、UnityEventの致命的な不具合
- 6 Unity2019.1~Unity2019.2.5でVideoコマンド
- 7 Unity5.6.0~Unity2017.1のAndroid上でフェードイン、アウトやイメージエフェクト表示がおかしくなるバグ
- 8 Unity5.6.0~Unity2017.1でMac版のUnityで表示がおかしくなるバグ
- 9 Unity5.6.0
Unity2020.2~ で、SenarioDataBuilderで、インポート対象の編集ができない
「Tools>Utage>ScenarioDataBuilder」で、インポート対象となるエクセルを編集しようとすると、
▶ボタンを押しても反応せずに、編集ができなくなってしまいます。
これはUnityが配列の表示UIを新しい形式にしたことによる不具合と思われ、検証したところ宴のほうで対応できる不具合ではなさそうです。
Unityには不具合報告済みですが、対応には時間がかかると思います。
さしあたっては、下記のようにScenarioDataBuilderに設定した「.project」アセットを直接編集してください。
ただ、Unity2021.1ではインスペクター上でも表示がおかしくなるようです。(編集は可能です)
宴側ではこの部分のインスペクターの表示はエディタ拡張していないので、やはりこれもUnityのバグかと思います。
追記 宴3.11.0以降で不具合が解消
回避するためのプログラム方法が判明したため宴3.11.0で修正しました。
Unity2018.4.20~Unity2018.4.24で、宴の新規プロジェクト作成時に「test」と入力すると、Unityがクラッシュする
「Tools>Utage>Create New Project」から宴の新規プロジェクトを作成する際に「test」と入力すると、
「curNewLowerCasePathName」から始まるこのようなダイアログが表示され、Unityがクラッシュしてしまいます。
宴では新規プロジェクトを作成する際に、「テンプレートフォルダ以下にあるアセットをコピーして、一部のアセット名やResources以下のフォルダ名を指定のプロジェクト名に変更する」といったことをしているのですが、
その名前変更のために使っている「AssetDatabase.RenameAsset」というUnityのAPIの内部でクラッシュしているようです。
ただ、不思議なことに「test」に近い名前の時だけクラッシュするようで、別の名前の時は不具合が起きません。
「test」は検証用に使いがちな名前だとは思うのですが、以下を参考に作成するプロジェクト名を変更するようにしてください。
・問題ないプロジェクト名
「a」「hoge」「test0」
・クラッシュするプロジェクト名
「t」「te」「tes」「test」
また、今のところUnity2018.4.20~Unity2018.4.23で起きているバグで、それ以前のバージョンのUnityや、Unity2019.3、Unity2019.4では発生していません。
追記 Unity2018.4.25で不具合が解消
この不具合はUnity2018.4.25で修正されたことを確認したました。
Unity2018.1~2019.2で、一部の端末でDateTime.Nowを呼びだすと例外エラー(TimeZoneNotFoundException)が起きる
一部の端末で、DateTime.Nowという現在時刻を取得するC#の標準機能を呼びだすと、TimeZoneNotFoundExceptionが起きることがあるようです。
これは環境依存バグのため私のPC環境では再現できていないのですが、おそらくこちらが原因と思われ、Unity2019.3では解決済みのようです。
https://issuetracker.unity3d.com/issues/timezonenotfoundexception-invalidtimezoneexception-error-when-registry-timezonekeyname-is-empty-crashes-editor-slash-build
宴3.8.2以前で、このエラーが起きてしまう端末では、宴でのシナリオ起動ができなくなってしまいます。
宴3.8.3以降で対応を行いましたが、エラーが起きてしまう場合は現在地の正しい時刻がとれないため、時差のある時間がセーブデータに表示されてしまうことになると思います。
プレイヤーにタイムゾーンの設定を、自動から手動にするように促す
この不具合は宴固有のものではなく、広くUnityを使ったゲーム全般で起きているようです。
PC向けのアプリだと起きているようで、「steam TimeZoneNotFoundException」などでGoogle検索すると、Steamの掲示板などでトラブル報告が何件か見つかります。
それらの掲示板の内容を見る限り、エラーが起きる各プレイヤーのWindowsの設定で「タイムゾーンを自動的に設定する」をオフにすると解決するようです。
Unity2019.3.6より前で、アセットバンドル化したサウンドでフリーズする不具合
Unity2019.3.6より前のUnityでは、アセットバンドル化したサウンドが鳴らず、その後のアンロードの際にアプリやUnityエディタ自体がフリーズする不具合があります。
バグの発生を確認できたのは、Unity2018.4.1、Unity2018.4.21、Unity2019.3.1です。
Unity2019.3以降ですと、「Failed getting load state of FSB for audio clip ファイル名」というエラーメッセージが出ます。
サウンド名をもとに、そのファイルだけ音楽編集ソフトで保存形式を変えるなどしてからアセットバンドルを作り直せばエラー自体も消えるかもしれません。
エラーがでるのは一部のファイルだけで再現手順が同じであれば100%発生しUnityエディタ上でも発生します。
ただし、シナリオの実行順を変えるなど再現手順が変わると、同じアセットバンドルであっても正常にロードされエラーが発生しないこともあるようです。
Unity2019.3.6でエラーメッセージはでるもののフリーズは回避される
バグの原因はおそらくこちで、Unity2019.3.6以降で修正されているようです。
https://issuetracker.unity3d.com/issues/unity-freezes-on-exiting-play-mode-when-loading-audio-asset-from-an-asset-bundle-fails-and-fsb-errors-are-thrown
Unity2019.3.10で確認したところ、エラーメッセージはでますが、音が鳴らなかったり、フリーズするといった不具合はでないようです。
Unity2018.4.9~2018.4.10(LTS)で、UnityEventの致命的な不具合
Unity2018.4.9ではUnityEventの仕組みに致命的な不具合が起きているようです。
引数を持つUnityEventの挙動が不安定になり、それまでのバージョンでは設定してあったメソッドやプロパティがMissingになるほか、引数自体を認識できずに新たに設定することも不可能になるケースが頻発します。
宴の各種イベントの設定ができなくなるほか、Unity公式の機能(UIのSliderやEventTrigger)でも上記の不具合が発生します。
Missingになった状態でも、一応プログラム自体は動作するケースもあるようですが、かなり致命的な不具合ですので、Unity2018.4.9は使用しないでください。
Unity2018.4.8まででは上記の不具合は出ていないようですので、バグが修正されるまではUnity2018.4.8以下をお使いください。
Unityへバグ報告したところ、こちらのバグが原因のようです。
本来はUnity2019でのバグのようですが、Unity2018.4(LTS)に混入してしまった模様です。
追記 Unity2018.4.11で不具合が解消
Unity2018.4.11で不具合が解消されたことを確認いたしました。
Unity2019.1~Unity2019.2.5でVideoコマンド
Unity2019.1では、Videoコマンドによる動画の再生ができません。(音声だけは再生可能です)
Unity2019.1では、Defaultレイヤーを描画対象としないカメラにビデオが描画できないというバグがあるためです。
Unityにバグ報告したところ、Unity2019.3.0a3(αの検証バージョン)では修正済みとのことです。
他にも、カメラにViewPortRectを設定してあると動画を正しい位置に描画ができなくなるバグが発生しています。
Unity2019のVideo機能には色々とバグがあるようなので、Unityがそれらを修正するまで宴のVideoコマンドも使用できません。
追記 Unity2019.2.6で不具合が解消
Unity2019.2.6で不具合が解消されました。Unity2019.2.6以降ではVideoコマンドが正常に使えます。
バグの詳細はUnity公式のIssueTrackerで確認できます。
なお、Unity2019.2.0~.2.5までは、描画はされるものの正しい位置に描画されません。
Unity5.6.0~Unity2017.1のAndroid上でフェードイン、アウトやイメージエフェクト表示がおかしくなるバグ
Androidの一部の端末で、フェードアウトやイメージエフェクトのときに画面が正常に描画されなくなる不具合が発生します。
これはUnity自体のバグのため、宴では解消できません。
バグの詳細はこちら
https://issuetracker.unity3d.com/issues/android-onrenderimage-function-is-called-before-the-camera-is-rendered
通常の宴の使い方では発生しないようですが、3Dモデルの描画のために3Dカメラ用のカメラを追加し、レターボックス処理のためにViewportRectで描画領域を限定させると発生します。
宴のサンプルシーンはこの構成であるため、サンプルシーンをビルドすると発生します。
回避策としては、SpriteやUIなどの2Dカメラのほうの「ClearFlag」を「Depth only」にすることだそうですが、
極力Unity2017.2以降にアップデートしてください。
Unity5.6.0~Unity2017.1でMac版のUnityで表示がおかしくなるバグ
Unity5.6.0~Unity2017.1のMac版のUnityで、「前の画面の一部が残り続ける」「会話シーンで使うと背景が真っ黒になる」などのバグが起きることがあります。
これはUnity公式機能が原因のバグで、宴側では対応できません。
Windwos版のUnityでは発生しないため、そちらを使っていただくのが一番ですが、
以下のいずれかの対策をすることでMac版でも回避可能です。
対策その1
表示がおかしくなったらGameViewウィンドウのサイズを変える。
ただし、これは手動で毎回しないといけないので面倒かもしれません。
対策その2
最初に設定した画面比率(デフォルトでは4:3)でGameViewのアスペクト比を固定する。
対策その3
レターボックス(余白を黒で塗りつぶす)をやめて、スクリーンサイズにあわせてゲーム画面のサイズを可変にする方法を使います。
やり方はこちらです。 カメラの描画範囲を可変に設定
ただし、これはゲームの仕様も変えることになるので、その点は注意してください。
バグの詳細
一応原因の詳細も記述しておきます。
このバグの原因はこちらになります。
https://issuetracker.unity3d.com/issues/camera-depth-is-ignored-when-setting-both-cameras-viewport-other-than-0-0-1-1
どういうバグかというと、「カメラのViewPortRectをデフォルト以外の設定にしていると、まともに描画されなくなる」という不具合です。
ViewPortRectとは、大ざっぱに言うと「カメラの描画結果を画面のどこに描画するか」という設定です。
この部分の設定を調整することで「画面の一部にのみ描画をする」ということが可能です。
宴では「レターボックス機能」のためにこの機能を使っています。
通常画面の手前に黒いオブジェクトなどを置いてもレターボックスは可能なのですが、その場合は無駄な描画負荷がかかりますので、ViewPortRectを使っています。
Mac版のUnityはこのViewPortRect機能を使っているとバグってしまうため、宴の描画全体がバグってしまっています。
Mac版のUnityのうち、Unity5.6、Unity2017で発生するバグのようですが、バージョンの詳細は不明です。
Unityには既に報告済みで、アップデート(おそらくUnity2017.2)で修正予定とのことです。
β版(Unity2017.2b7)で確認したところ修正されているようでした。
Unity2017.2がリリースされるまでは、上記の対策のように
「UnityのGameViewに何らかのリセット処理をかける」か、「宴で設定したアスペクト比とGameViewのアスペクト比が一致するようにするしてレターボックスを無効化する」
ということをやってみてください。
Unity5.6.0
Unity5.6.0にはバグがあるので、宴3.0.0~3.0.4は動作しません。
宴を3.0.5以上にアップグレードしてください。
Canvasの入れ子構造をなくす
Unity5.6.0のバグで、Canvasが入れ子になっている場合は入力が正常に動作しなくなります。
宴3.0.5以上で新規に作成した場合は問題ありません。
宴3.0.0~3.0.4で作成した場合は、以下のようにしてCanvasが入れ子になっている部分を修正してください。
原因は、UnityのバグなのでUnityの修正を待つのが良いかもしれません。
Unity5.6のバグに関しては詳細はこちら