Unityメモ – アンドロイドにある画像を読み込んで表示する方法

Posted: 2016年3月24日 カテゴリー: プログラミングメモ, Unity, Unity メモ
タグ:, ,

前回のメモのバージョン違いになりますが、今回はアンドロイドのローカル上(SDカードを含む)かた画像を読み込み、表示する方法を紹介します。
読み込んだ画像を設定する為のImageへの参照を宣言します。今回はUI Imageにしていますが、Sprite等でも大丈夫です。

    [SerializeField]
    UnityEngine.UI.Image m_image = null;

ファイルを読み込むまでは前の音楽ファイルを読み込む時と同じになります。その為、ここからは少しコピペが入ります。

ファイルを読み込む方法としましては、ファイルへのパスを指定し、WWWクラスを使って読み込みます。

さっそく読み込み機能を実装してみます。まず、WWWクラスのインスタンスを作ります。

    const string _FILE_HEADER = "file://";

    private IEnumerator LoadImage(string path)
    {
        // ファイルが無かったらやめる
        if (!System.IO.File.Exists(path))
        {
            Debug.Log("File does NOT exist!!, path = " + path);
            yield break;
        }

        // ファイル読み込み
        WWW request = new WWW(_FILE_HEADER + path);

メソッドに渡しているパスはファイルへのフルパス(フォルダの位置や拡張子込み)です。まずそれを使ってファイルが存在しているかの確認を行っています。ある場合はそれをWWWクラスへ渡してインスタンスを生成しています。

次に読み込み待ちを挟みます

        // 読み込み待ち
        while (!request.isDone)
        {
            yield return new WaitForEndOfFrame();
        }

説明はしてませんでしたが、このメソッドはコアルーチンにしています。そうした理由としてはここでやっている様な読み込待ちを入れやすくする為です。

次に読み込みが終わったWWWからTexture2D(画像)を取り出します。

        // 画像を取り出す
        Texture2D texture = request.texture;

取り出した画像を元にSpriteを生成し、それをImageのSprite(使用する画像)へ指定します。

        // 読み込んだ画像からSpriteを作成する
        Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));

        // 画像をUI Imageに設定する
        m_image.sprite = sprite;
        yield return 0;
    }

これで終了です。あとはこのメソッドをStartCoroutine()で呼び出してください。

これで読み込みが出来たら画像が表示されます。今回紹介した処理を使う場合は、Imageへの参照を設定するのを忘れない様にしてください(エディター上でドラッグ&ドラッグでおk)。
使用例の音楽プレイヤーモドキです。最後の方に画像読み込んでアイコンに設定しています:

以上になります。今回紹介した方法はWindowsとかでも多分流用出来ると思いますが、今の所アンドロイドでのみ動作確認を取っています(メンドクサイ)。
え、そもそもパスを獲得するのが面倒?そんな時の為のアセットストアですよ!世の中お金で解決出来るんですよきっと(適当)。

 

最後の今回紹介したメソッドを貼っておきます:

    const string _FILE_HEADER = "file://";

    private IEnumerator LoadImage(string path)
    {
        // ファイルが無かったらやめる
        if (!System.IO.File.Exists(path))
        {
            Debug.Log("File does NOT exist!!, path = " + path);
            yield break;
        }

        // ファイル読み込み
        WWW request = new WWW(_FILE_HEADER + path);

        // 読み込み待ち
        while (!request.isDone)
        {
            yield return new WaitForEndOfFrame();
        }

        // 画像を取り出す
        Texture2D texture = request.texture;

        // 読み込んだ画像からSpriteを作成する
        Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));

        // 画像をUI Imageに設定する
        m_image.sprite = sprite;
        yield return 0;
    }

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中