🎮

【Unity】ランタイムで指定したフォルダをファイラーで開く(Mac/Windows)

に公開

TL;DR

// MyPicturesフォルダを開く場合
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
System.Diagnostics.Process.Start(path);

経緯

Windows/Mac向けに開発している『Vフレット』というアプリには、スクリーンショットを撮影する機能があります。
20230224-020432.png

スクリーンショットは直接PCの指定フォルダ上に保存される仕組みなのですが、撮影後に保存先のフォルダを開くことができると便利かなと思い方法を調べてみました。

まずはこちらで紹介されている方法を試したところ、Windows版では問題なかったのですが、Mac版でうまく動作しない問題に遭遇しました。

https://masakami.com/archives/2020/05/22/663/

そこで TwitterやUnityゲーム開発者ギルドで質問をしたところ、Processクラスを使えばいいのではないかとアドバイスをいただきました(皆さんありがとうございました…!)

https://twitter.com/shiena/status/1628730086966071297

Processクラスは通常対象のプロセス名を指定することが多いのですが

// プロセス名を指定する方法
System.Diagnostics.Process.Start("EXPLORER.EXE", @"C:\My Documents\My Pictures");

こちらの記事によると、

「ファイルを関連付けられたソフトで開く」と同じように、フォルダも関連付けで開くことができます。フォルダは通常エクスプローラに関連付けられていますので、関連付けが変更されていない限り、エクスプローラでフォルダが開きます。

とありました。今回はWindowsとMacの両方に対応するアプリなので、プロセス名の指定を省略できる方が同じ記述で要件を満たしテストもシンプルになります。

// MyPicturesフォルダを開く場合
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
System.Diagnostics.Process.Start(path);

そこで上記のようなコードで試してみたところ、Windows/Macそれぞれで意図通りの動作となりました!!

scren2.gif

最後に

Twitterやってるので良かったらフォローお願いします!→ @nkjzm

また、VRMアバターで"それっぽく"弾き語りができる『Vフレット』というアプリを開発しています。こちらも興味があれば良かったらぜひ見てみてくれると嬉しいです!

https://nkjzm.jp/vfret

Discussion