質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2590閲覧

UnityでWindowsダイアログを開きたい

hidaru

総合スコア4

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/07/21 06:37

開発環境

windows10
Unity 2021.1.1.16f1
Visual Studio 2019 16.11.17

実現したいこと

Unity内でファイルダイヤログを開きたいです。
Windowsで使用することを想定して、他環境では動作することを考えていません。
UnityEditor内だけでなくビルド後も使用することを考えています。

現状、▶押下後のゲームテストではボタン押下でファイルダイアログが開きます。
ただ、ビルド後のexeではゲームテスト時と同じボタンを押してもファイルダイアログが開きません。

ビルド後でも開くようにしたいです。
何卒お力添えをお願いいたします。

該当のソースコード

下記のButtonTorch1FileDialog()をUnity画面内のボタンのクリック時動作に登録しています。

C#

1public void ButtonTorch1FileDialog() 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7using System.Windows.Forms; 8 9public class ui_manage : MonoBehaviour 10{ 11 12 public UnityEngine.UI.Button btn_Torch_1_open; 13 14 void Start() 15 { 16 } 17 18 void Update() 19 { 20 } 21 22 public void ButtonTorch1FileDialog() 23 { 24 OpenFileDialog ofd = new OpenFileDialog(); 25 ofd.Title = "csvファイルを選択してください"; 26 ofd.Filter = "csvファイル(.csv)|*.csv"; 27 28 if (ofd.ShowDialog() == DialogResult.Cancel) 29 { 30 return; 31 } 32 } 33}

試したこと

いくつか検索を行い下記のサイトを参考にしました。

https://qiita.com/otochan/items/0f20fad94467bb2c2572

ただSystem.Windows.Forms.dllは「C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0」では見つかりませんでした。
恐らくバージョンが違うのか該当するファイル先として
「D:\Program Files\Unity\Hub\Editor\2021.1.16f1\Editor\Data\MonoBleedingEdge\lib\mono\2.0-api」
と考え、その中のSystem.Windows.Forms.dllをUnity内のAssets/Pluginsにコピーしました。

その状態だと下記のエラーが出ました。

Assembly 'Library/ScriptAssemblies/Unity.PlasticSCM.Editor.dll' will not be loaded due to errors: Reference has errors 'unityplastic'.
Assembly 'Packages/com.unity.collab-proxy/Lib/Editor/PlasticSCM/unityplastic.dll' will not be loaded due to errors: unityplastic references strong named System.Windows.Forms Assembly references: 4.0.0.0 Found in project: 2.0.0.0. Assembly Version Validation can be disabled in Player Settings "Assembly Version Validation"

かつテストプレイ時にボタンを押下しても

NullReferenceException: Object reference not set to an instance of an object System.Windows.Forms.CommonDialog.ShowDialog () (at <361626b7593f474ba856a43d392652dc>:0)

とエラーが出て、ファイルダイアログは開きません。

そのため、「C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll」
よりAssets/Pluginsにコピーしました。
その状態でテストプレイすると無事にファイルダイアログが開きましたが、ビルド時にSystem.Deployment.dllが無いと言われたので
「C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Deployment\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll」
より同じくコピーしました。

そうすると無事にビルドは通りましたが、「実現したいところ」に書いたようにビルド後ではファイルダイアログが開きませんでした。
参考サイトでも書かれている通りWindows等のフォルダ内にあるdllではうまく動作しないことが原因なのでしょうか?
その場合はUnity内のdllを使用すると事が他のサイトでも指摘されていましたが、そちらでは上記のエラーが出ます。

補足説明

今回の事象と関係があるのかわかりませんが、調べている途中に出てきた問題でAPI互換性レベルの記述をいくつか見たので現在の設定を書いておきます。

編集>プロジェクト設定>プレイヤー>PC,Mac & Linux Standalone の設定>その他の設定>API互換性レベル
は「.Net Standard 2.0」に設定しています。
他の選択肢は「.Net 4.x」しかありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

軽くぐぐってみました。
無料でやるならこのあたりが参考になるかもですね。ただしIssueは読む必要ありそうです。
https://github.com/gkngkc/UnityStandaloneFileBrowser

有料ならば
https://assetstore.unity.com/packages/tools/utilities/file-browser-pro-98713?aid=1011lNGT&utm_campaign=unity_affiliate&utm_medium=affiliate&utm_source=partnerize-linkmaker

さらにフォーラムも生きているので、おそらく確実かと。
https://forum.unity.com/threads/file-browser-native-file-browser.510403/

投稿2022/07/23 19:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問