Skip to content

アップロード時に「Creating asset at path failed.」でビルドが失敗する(GenerateUniqueAssetPathの空文字戻りが未検証) #47

Description

@UnisakiStudio

症状

アバターのアップロード時に以下の例外が発生しビルドが失敗する報告があります(サポート問い合わせより。可愛いポーズツールを外すとアップロード可能)。

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)へ渡るため例外になります。パスが不正になる経路:

  1. GetGeneratedFolderPath()Directory.CreateDirectory("Assets/UnisakiStudio/GeneratedResources") でフォルダを作った直後、AssetDatabase.ImportAsset/Refresh を挟まずに返すため、AssetDatabase未認識のフォルダパスに対して GenerateUniqueAssetPath が失敗する
  2. ラベル PosingSystemResourceFolder 付きフォルダがエクスプローラ等で削除・移動済みの場合に古いパスが返る
  3. アバターのGameObject名にアセットパスとして不正な文字(/ 等)が含まれる場合

修正案

  • GetGeneratedFolderPath() でフォルダ作成後に AssetDatabase.ImportAsset(folder) を呼ぶ
  • GenerateUniqueAssetPath の戻り値が空文字の場合のガード(ユーザー向けエラーメッセージ明示)
  • アバター名のサニタイズ(Path.GetInvalidFileNameChars 除去)

Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions