2013年11月24日日曜日

Unity Tips #57 Resource.Load/LoadAll での良くある間違い


前回に続いてUnifty Community から Unity Tips を紹介する:

http://wiki.unity3d.com/index.php/Tip_of_the_day
Mar 2013

Unity Tips #57 Resource.Load/LoadAll Gotchas


Resource.Load/LoadAll での良くある間違い


最近、テキスト リソース アセットのおかしな動作に遭遇した。

具体的には Resources.LoadAll メソッドが Path.DirectorySeparatorChar をパスで受付しないのである。実際のところ Path.AltDirectorySeapratorChar 文字列しか受付しない。この動作は標準の .NET ファイル/フォルダ メソッドでは Path.AltDirectorySeapratorChar と Path.DirectorySeparatorChar いずれも受付するという状況であるのに、異なっている。

これはつまり、 Path.Combine を使用して パスをビルドして Resources.LoadAll メソッドに受け渡しすることは出来ず、最初にPath.Directory SeparatorChar 文字列を Path.AltDirectgorySepartorChar 文字列で置き換える必要がある、ということだ。

using System.IO;
using UnityEditor;
using UnityEngine;
 
/// <summary>
/// Settings 登録のハンドリングを行う
/// </summary>
[InitializeOnLoad]
public class EditorInitialization
{
    /// <summary>
    /// RunCallbacks メソッドが一回でもすでにコールされたかを示す値を保持する
    /// </summary>
    private static bool ranOnce;
 
    /// <summary>
    /// <see cref="EditorInitialization"> クラスの static メンバを初期化する。
    /// </summary>
static EditorInitialization()
    {
        EditorApplication.update += RunCallbacks;
    }
 
    private static void RunCallbacks()
    {
        if (!ranOnce)
        {
            // リソースのロードを試みる
            var path = Path.Combine("Test/SubFolder", "testfile"); // 結果は Test/SubFolder\testfile
 
            // var data = Resources.LoadAll("Test/SubFolder/testfile", typeof(TextAsset)); // この行を正しく処理
            var data = Resources.LoadAll(path, typeof(TextAsset));  // この行は失敗
 
            if (data != null && data.Length != 0)
            {
                Debug.Log("みつかりました");
            }
            else
            {
                Debug.Log("みつかりませんでした!" + path);
            }
 
            ranOnce = true;
            return;
        }
 
        // 処理を追加
    }
}
次のリンク先に提出したバグレポートがある。
--------------

 Tipsで少しづつでも知識を積み上げていこうぜ!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿