Unity製のPCアプリで、画像や動画などのファイルをPCアプリの画面にドラッグしたら、マテリアルやVideoPlayerにセットされて表示できるものを作ろうと思った。
ChatGPTに聞きながらやったけど、ファイルをドラック&ドロップするのはめんどくさそうだったので、ボタンを押したらファイル選択画面が出てきて選択できるようなものにする。
Windows版
Windows版はなんとかできた
以下のようなスクリプトを作って、OpenImageFile()とOpenMovieFile()をそれぞれ別のボタンから呼び出す
using System.Windows.Forms;
using UnityEngine;
using UnityEngine.Video;
public class SetFile : MonoBehaviour
{
[SerializeField] private GameObject _Image;
[SerializeField] private VideoPlayer _videoPlayer;
public void OpenImageFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
dialog.Title = "画像ファイルを選択してください";
if (dialog.ShowDialog() == DialogResult.OK)
{
string filePath = dialog.FileName;
byte[] fileData = System.IO.File.ReadAllBytes(filePath);
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(fileData);
_Image.GetComponent<Renderer>().material.mainTexture = texture;
}
}
public void OpenMovieFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Movie files (*.mp4)|*.mp4";
dialog.Title = "動画ファイルを選択してください";
if (dialog.ShowDialog() == DialogResult.OK)
{
string filePath = dialog.FileName;
StartCoroutine(PlayVideo(filePath));
}
}
private System.Collections.IEnumerator PlayVideo(string filePath)
{
_videoPlayer.source = VideoSource.Url;
_videoPlayer.url = "file:///" + filePath;
_videoPlayer.Prepare();
while (!_videoPlayer.isPrepared)
{
yield return new WaitForSeconds(0.1f);
}
_videoPlayer.Play();
}
}
System.Windows.Forms.dllをC:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0からコピーしてAssts/Pluginsフォルダの下に入れた。
alpacatech.hateblo.jp
Unityを再起動しないとうまく動かなかった気がする。
成功したらUnityEditorでもボタンを押したらこういう古めかしいダイアログが出てきてファイルを選んだ読み込める
ちなみにWindowsのファイル読み込みは5年前にもやった。その時も同じような感じだったな~
bibinbaleo.hatenablog.com
Mac
Macでも同じようにファイルを読み込めるようにしたいという要望が出た。
UnityStandaloneFileBrowserというアセットを使う必要があるっぽい
zenn.dev
ここからUnityPackageをダウンロード
github.com
CanvasSampleSceneを開いて実行する
以下の記事にあるように.pngをpngに修正すると画像選択画面が出て、読み込まれた
namiton.hatenablog.jp
サンプルスクリプトやChatGPTをもとに、ファイル選択部分を作り替えた。
Windowsでは無事動いた。普通のエクスプローラー画面だった。
Macビルド
MacのUnityEditorで動かそうとしたらエラーでファイル選択ができない
こちらの記事をもとに、ありとあらゆるものをIntel 64-bitだけにしたらいけた!
qiita.com
必要だったか分からないけどPluginの中にあるもので、
Intel 64-bitを選べるものは全部そうした。
AppleSiliconのMacで作業してたので、AnyCPUにしないと動かないかと思ったけどそんなことなかった。
Editorでは結局動かなかったけど、Macビルドしたら無事動いた。