0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unityでエクスプローラーを開いて特定の拡張子のファイルのみ選択させる

Posted at

■はじめに

UnityでPhotoshopで画像を読み込むときと同じように、拡張子を選択するとその拡張子のファイルのみが表示されるような挙動をランタイムで動くように実装したかったでのやってみた。

targetpicture.png

■環境

Unity 6000.0.23f1

参考

  • 最シンプルでランタイムで動かす場合の参考元(今回は別のやり方)

■使わせてもらうもの

ここのDownload Packageから.unitypackageをゲッチュ。

■コード

/// <summary>
/// 一つだけ選択されたファイルのパスを返す
/// </summary>
/// <param name="_title">(*1)で表示される文字</param>
/// <param name="_openPath">(*2)最初に開くパス</param>
/// <param name="_extensions">(*3)選択できる拡張子一覧</param>
/// <returns>選択されたファイルのパス</returns>
public string OpenAndGetFilePath(string _title,string _openPath, string[] _extensions)
{
    // 表示するファイルの拡張子を設定
    var extensions = new[]
    {
        //第一引数は拡張子の説明用名前、第二引数はstring[]なので、
        //以下の様に拡張子を直に指定しても、この関数の_extensionsを使っても良い。
        //_extensionsを使う場合は、[png][jpg][jpeg]の様な任意の拡張子を指定するstringの配列になっている必要がある
        new ExtensionFilter("Image Files", "png", "jpg", "jpeg", "bmp"),
        // new ExtensionFilter("Image Files", _extensions),
    };

    //ここでエクスプローラーを開いて、選択されたファイルのパスが返ってくる。
    //OpenFilePanelAsyncにして、コールバック関数を指定するやり方もできる。
    string[] paths = StandaloneFileBrowser.OpenFilePanel(_title, _openPath, extensions, false);
    // StandaloneFileBrowser.OpenFilePanelAsync(_title, _openPath, extensions, false, paths =>
    // {
    //     if (paths != null && paths.Length > 0)
    //     {
    //         UnityEngine.Debug.Log($"指定されたファイルのパス => {paths[0]}");   
    //     }
    // });

    if (paths.Length > 0 && !string.IsNullOrEmpty(paths[0]))
    {
        UnityEngine.Debug.Log($"選択したファイルのパス => {paths[0]}");
        return paths[0];
    }
    
    //ファイルが選択されずにキャンセル等された場合も含まれる
    UnityEngine.Debug.LogWarning($"パスが異常でした => {paths}");
    return "";
}

(*1)_title

ここの文字
title.png

(*2)_openPath

開くフォルダ。
ここでは画像を選択させるためにピクチャーフォルダを開きたかったので、以下の様に指定している。

var openPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

(*3)_extensions

こんな感じで指定している。

    var extensions = new string[]
    {
        "png",
        "jpg",
        "jpeg",
        "bmp",
    };

拡張

  • 今回は1ファイルのみ選択してほしい状況だったので、StandaloneFileBrowser.OpenFilePanelの第三引数はfalseになっていますが、これをtrueにすると複数ファイルまとめて選択ができます。
  • もしPhotoshopみたいに拡張子の説明名と拡張子を何個も設定したい場合は、
    ExtensionFilterの数を増やせばOK。
    image.png
    拡張子の説明名と拡張子リストをセットで構造体等にまとめてリスト等で渡したらこれができる。

最後に

最近成城石井で買ってみたTEARTHのはちみつチャイが美味しい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?