症状
アバターのアップロード時に以下の例外が発生しビルドが失敗する報告があります(サポート問い合わせより。可愛いポーズツールを外すとアップロード可能)。
UnityEngine.UnityException: Creating asset at path failed.
at UnityEditor.AssetDatabase.CreateAsset(UnityEngine.Object,string)
at jp.unisakistudio.posingsystemeditor.AnimatorControllerDeepCopy.CloneAnimatorController(...)
エラーメッセージのパス部分が空文字になっている点が特徴です。
原因(Ver3.0.6 ソースの静的調査)
呼び出しチェーン: PosingSystemConverter.CreateOriginalAnimatorController() → PosingSystemEditor.GetGeneratedFolderPath() → AssetDatabase.GenerateUniqueAssetPath() → AnimatorControllerDeepCopy.CloneAnimatorController()
AssetDatabase.GenerateUniqueAssetPath() はパスが不正な場合に空文字を返しますが、戻り値の検証なしに AssetDatabase.CreateAsset(clone, newPath)(AnimatorControllerDeepCopy.cs:62)へ渡るため例外になります。パスが不正になる経路:
GetGeneratedFolderPath() が Directory.CreateDirectory("Assets/UnisakiStudio/GeneratedResources") でフォルダを作った直後、AssetDatabase.ImportAsset/Refresh を挟まずに返すため、AssetDatabase未認識のフォルダパスに対して GenerateUniqueAssetPath が失敗する
- ラベル
PosingSystemResourceFolder 付きフォルダがエクスプローラ等で削除・移動済みの場合に古いパスが返る
- アバターのGameObject名にアセットパスとして不正な文字(
/ 等)が含まれる場合
修正案
GetGeneratedFolderPath() でフォルダ作成後に AssetDatabase.ImportAsset(folder) を呼ぶ
GenerateUniqueAssetPath の戻り値が空文字の場合のガード(ユーザー向けエラーメッセージ明示)
- アバター名のサニタイズ(
Path.GetInvalidFileNameChars 除去)
Generated by Claude Code
症状
アバターのアップロード時に以下の例外が発生しビルドが失敗する報告があります(サポート問い合わせより。可愛いポーズツールを外すとアップロード可能)。
エラーメッセージのパス部分が空文字になっている点が特徴です。
原因(Ver3.0.6 ソースの静的調査)
呼び出しチェーン:
PosingSystemConverter.CreateOriginalAnimatorController()→PosingSystemEditor.GetGeneratedFolderPath()→AssetDatabase.GenerateUniqueAssetPath()→AnimatorControllerDeepCopy.CloneAnimatorController()AssetDatabase.GenerateUniqueAssetPath()はパスが不正な場合に空文字を返しますが、戻り値の検証なしにAssetDatabase.CreateAsset(clone, newPath)(AnimatorControllerDeepCopy.cs:62)へ渡るため例外になります。パスが不正になる経路:GetGeneratedFolderPath()がDirectory.CreateDirectory("Assets/UnisakiStudio/GeneratedResources")でフォルダを作った直後、AssetDatabase.ImportAsset/Refreshを挟まずに返すため、AssetDatabase未認識のフォルダパスに対して GenerateUniqueAssetPath が失敗するPosingSystemResourceFolder付きフォルダがエクスプローラ等で削除・移動済みの場合に古いパスが返る/等)が含まれる場合修正案
GetGeneratedFolderPath()でフォルダ作成後にAssetDatabase.ImportAsset(folder)を呼ぶGenerateUniqueAssetPathの戻り値が空文字の場合のガード(ユーザー向けエラーメッセージ明示)Path.GetInvalidFileNameChars除去)Generated by Claude Code