開発環境
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」しかありません。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。