実行ファイルのパス名に「##」「# 」を含めると、Streaming Assetの読み込み先がおかしくなる

165 views
Skip to first unread message

taku_hsy

unread,
May 28, 2022, 12:06:23 PM5/28/22
to 宴ユーザーグループ
宴のバージョン: 宴3.11.4
UnityのバージョンとOS: Unity2020.3.16f1 Windows

お世話になっております、開発中にバグなのでは?という現象に出くわしましたので報告いたします。

WindowsでのBuild後に、フルパス名のどこかに、「##」「# 」(シャープ・スペース)を含めたを状態でExeを実行すると、Streaming Assetの読み込み先が「WWWEx」クラスの方に流れて?しまい正常に動作しなくなりました。
なおDevelopフラグのオンオフどちらでも症状を確認し、「##」「# 」を削った場合に正常に動作することを確認しています。
回避方法が明確なため、今の所は開発に支障はありませんが、念のため報告させていただきます。

下記にPlayer.logの当該箇所を抜粋します。プロジェクト名は「TEST」(仮名)とさせていただきます。正常起動時、WWWExの下りは表示されません。

Mono path[0] = 'G:/###  TEST/ROM/Develop_x86/TEST_Data/Managed'
Mono config path = 'G:/###   TEST/ROM/Develop_x86/MonoBleedingEdge/etc'
PlayerConnection initialized from G:/###   TEST/ROM/Develop_x86/TEST_Data (debug = 0)

~(中略)~

WWW load error file:///G:/
HTTP/1.1 404 Not Found
UnityEngine.StackTraceUtility:ExtractStackTrace ()
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogError (object)
Utage.WWWEx/<>c__DisplayClass55_0:<LoadAsync>b__1 (UnityEngine.Networking.UnityWebRequest) (at D:/work/TEST/test/TEST/Assets/Utage/Scripts/GameLib/File/WWWEx.cs:387)
Utage.WWWEx/<LoadAsyncSub>d__57:MoveNext () (at D:/work/TEST/test/TEST/Assets/Utage/Scripts/GameLib/File/WWWEx.cs:470)
UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)

(Filename: D:/work/TEST/test/TEST/Assets/Utage/Scripts/GameLib/File/WWWEx.cs Line: 387)

~(後略)~

Resorceフォルダのデータは正常に読めているようで、タイトル表示後のStreamingAsset内のデータにアクセスする箇所で不具合がいろいろと出てくる状況です。

UnityやC#の言語仕様などに精通しているわけではないため、utageの現象ではないかもしれませんが、よろしければご確認いただければと思います。

taku_hsy

unread,
May 28, 2022, 12:12:40 PM5/28/22
to 宴ユーザーグループ
記載忘れましたが、
AdvEngineStarterのStrageTypeは「StreamingAssets」もしくは「StreamingAssetsAndLocalScenario」で
当該現象を確認しております。

よろしくお願いいたします。

2022年5月29日日曜日 1:06:23 UTC+9 taku_hsy:

マッドネスラボ

unread,
May 28, 2022, 5:50:57 PM5/28/22
to 宴ユーザーグループ
ご報告ありがとうございます。
こちらでも同様の現象を確認しました。

StreamingAsset から アセットバンドルをロードする場合、 Unityが提供するパス( Application.streamingAssetsPath )をルートパスにして使っていたのですが、
アセットバンドルはURLでロードするため、ルートパスにURLとしての禁止文字が含まれる場合にそなえてエンコードしていなかったのが原因でした。

修正しましたので添付のパッケージファイルをご確認ください。



2022年5月29日日曜日 1:12:40 UTC+9 taku_hsy:
FixRootUrlEncode.unitypackage

taku_hsy

unread,
Jun 6, 2022, 5:21:41 AM6/6/22
to 宴ユーザーグループ
ご回答、ご対応ありがとうございます。
お返事遅れましたが、こちらパッケージを当てましたら正常に動作するようになりました。
ありがとうございます。


2022年5月29日日曜日 6:50:57 UTC+9 マッドネスラボ:

taku_hsy

unread,
Jun 9, 2022, 4:48:51 AM6/9/22
to 宴ユーザーグループ
お世話になっております。

ここ数日、色々とこちらの報告に対して対応をしていただきありがとうございます。
その後、各プラットフォームのビルドを作成しているのですが、Android版が正常に動作しないのが確認されました。
色々とバージョンを戻しながら追っていきますと、ここで頂いたパッチ内の「FilePathUtil.cs」を当てますと、
Android版の際にStreamingAssetsからの読み込みが出来なくなっているように見受けられました。
お手数ですが、ご確認いただけますでしょうか?



2022年6月6日月曜日 18:21:41 UTC+9 taku_hsy:

マッドネスラボ

unread,
Jun 10, 2022, 3:48:35 AM6/10/22
to 宴ユーザーグループ
ご連絡ありがとうございます。
こちらでも確認して修正しましたので、添付のパッケージファイルを適用して下さい。

AndroidとWebGLの場合は、Application.streamingAssetsPath すでにURL化されているので、
さらにURLエンコードするとエラーになってしまう・・・というのが原因のようでした。

また、結果的にAndroidの場合は、URLエンコードをかけなくなってしまうので、
パス内にURLとして無効な文字を混ざっていると、ロードエラーが復活してしまうと思います。

実際には、宴のプロジェクト名やリソースのルートフォルダ名などに特殊な名前を設定しなければ良いというだけなので、あまり問題にはならないと思います。
PCの実行ファイルの置き場所など、開発側で制御できないものに関しては、URLエンコードがされるようになっていると思います。



2022年6月9日木曜日 17:48:51 UTC+9 taku_hsy:
FixAndroidUrlEncode.unitypackage

taku_hsy

unread,
Jun 11, 2022, 11:48:38 AM6/11/22
to 宴ユーザーグループ
ご回答、ご対応ありがとうございます。

大変心苦しいのですが、頂いた上記パッチでWin版、Android版は上手くいったのですが、今度はMac版ビルド後に配布用にパッケージ化した後にパッチ前のAndroid版と同様の現象が発生するようになってしまいました。(unityおよびxcode上では正常に動きました)
こちらも試しにFilePathUtil.csを撒き戻しますと再び正常に動作いたしましたので、当該パッチが原因の可能性が高いと思われます……

改めて確認をお願いしたいのですが、大変申し訳ないのですが今回はこちらのスケジュールの都合上、そもそも初期のWin版のバグ(「##」を利用する場合のみ)の方がレアケースのため、確認等にお時間がかかるようでしたら、今回はパッチを当てないで進行させていただきたく思います。
今後の宴の開発に伴う「サポートパッチ→本編への反映」に影響があるかと思いまして報告はさせていただきました。

何卒よろしくお願いいたします。


2022年6月10日金曜日 16:48:35 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Jun 11, 2022, 4:53:02 PM6/11/22
to 宴ユーザーグループ
ご確認ありがとうございます。

調査してみたのですが、Mac版でUnityエディタ上でもエラーが発生するケースがあるようでした。
色々調べてみたのですが、どうもUnityのバグのようです。

・ルートパスに、URL文字とするならエンコードが必要なはずの日本語文字やスペースを混ぜても問題なく動く。エラーになるのは今のところ「#」だけ。
・Windwos以外では明示的なURLエンコードをしてしまうとかえって動作しない
・StreamingAssetsのロードに明示的なエンコード処理をしているようなサンプルやドキュメント、インターネットのブログ情報がどこにもない。
という状態なので
おそらく明示的にエンコードをしなくても、UnityのWebRequestの内部でエンコードかそれに近い処理が行われるというのが本来の仕様で、バグで「#」だけ対応できていないのかと思います。

Unityにバグレポートを送りましたので、ひとまずその返答を待とうと思います。

宴のほうで、Windowsの場合だけエンコードを明示的に追加するような処理をしようとも思ったのですが、
Unityのバグの可能性が高いため、下手に処理を加えてしまうとUnityのバージョンによって動作が変わりかねないため、宴側では何もしないという形に戻そうと思います。



2022年6月12日日曜日 0:48:38 UTC+9 taku_hsy:

taku_hsy

unread,
Jun 11, 2022, 9:23:52 PM6/11/22
to 宴ユーザーグループ
素早い対応ありがとうございました。

了解いたしました。
それではこの問題に関しましては「『#』を含むフォルダを利用しないで欲しい」を当面の仕様としまして、
当スレッドで頂きましたパッチ類は一度外させていただくことにいたします。
ご丁寧に対応いただきまして、ありがとうございました。


2022年6月12日日曜日 5:53:02 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages