前提・実現したいこと
unityで、ファイルを指定するためにOpenFileDialogを用いることにしました。
https://qiita.com/otochan/items/0f20fad94467bb2c2572
上のサイトを参考に、dllファイルをアセットにインポートしましたが、サイトに記されたパスになく、今回は、
C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\MonoBleedingEdge\lib\mono\2.0-api
内にあったSystem.Windows.Forms.dllをインポートしました。
発生している問題・エラーメッセージ
エディタ内のゲーム画面ではうまくダイアログが出て期待通りの動作をしてくれるのですが、
ビルド後では以下のようにエラーが出てしまいます。
また、エディタ内のゲーム動作時にも、該当のプログラムを作動させると「could not register the window class,Win32 error0」と2回出てきますがその後は普通に動作します。
NullReferenceException: Object reference not set to an instance of an object at System.Windows.Forms.CommonDialog.ShowDialog () [0x00000] in <361626b7593f474ba856a43d392652dc>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.CommonDialog.ShowDialog() at load.loadfunc () [0x0007b] in C:\Users\mimim\Desktop\unity\MyFirstGame\Assets\script\load.cs:75 at UnityEngine.Events.InvokableCall.Invoke () [0x00010] in <0126a3eddada4a3fab5737479c0e7d2b>:0 at UnityEngine.Events.UnityEvent.Invoke () [0x00022] in <0126a3eddada4a3fab5737479c0e7d2b>:0 at UnityEngine.UI.Button.Press () [0x00027] in C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\UI\Core\Button.cs:68 at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00010] in C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\UI\Core\Button.cs:110 at UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00001] in C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\ExecuteEvents.cs:50 at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) [0x0006c] in C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\ExecuteEvents.cs:261 UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object) UnityEngine.DebugLogHandler:LogException(Exception, Object) UnityEngine.Logger:LogException(Exception, Object) UnityEngine.Debug:LogException(Exception) UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1) (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\ExecuteEvents.cs:265) UnityEngine.EventSystems.StandaloneInputModule:ReleaseMouse(PointerEventData, GameObject) (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\InputModules\StandaloneInputModule.cs:195) UnityEngine.EventSystems.StandaloneInputModule:ProcessMousePress(MouseButtonEventData) (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\InputModules\StandaloneInputModule.cs:644) UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent(Int32) (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\InputModules\StandaloneInputModule.cs:552) UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent() (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\InputModules\StandaloneInputModule.cs:532) UnityEngine.EventSystems.StandaloneInputModule:Process() (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\InputModules\StandaloneInputModule.cs:289) UnityEngine.EventSystems.EventSystem:Update() (at C:\Program Files\Unity\Hub\Editor\2019.4.9f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\EventSystem\EventSystem.cs:377)
該当のソースコード
関係ない部分が多いかと思いますが、ダイアログ関係は一部分です。
C#
1using System.Collections; 2using System.Collections.Generic; 3using System.Security.Cryptography; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.UIElements; 7using System.IO; 8using System.Text; 9using System.Windows.Forms; 10 11 12public class load : MonoBehaviour 13{ 14 GameObject Message; 15 16 [Header("メッセージを加えるオブジェクト")] 17 public GameObject list; 18 19 [Header("addを与えるオブジェクト")] 20 public GameObject addobj; 21 22 add Add; 23 24 [Header("saveオブジェクト")] 25 public GameObject saveobj; 26 27 [Header("test")] 28 public GameObject test; 29 Text testtext; 30 31 save Save; 32 33 public List<string> message; 34 public List<int> ID; 35 public List<string> time; 36 public List<float> pos_x; 37 public List<float> pos_y; 38 public List<float> pos_z; 39 public List<float> rot_x; 40 public List<float> rot_y; 41 public List<float> rot_z; 42 public List<float> rot_w; 43 44 45 // Start is called before the first frame update 46 void Start() 47 { 48 Add = addobj.GetComponent<add>(); 49 Save = saveobj.GetComponent<save>(); 50 51 testtext = test.GetComponent<Text>(); 52 53 Message = (GameObject)Resources.Load("message"); 54 } 55 56 public void loadfunc() 57 { 58 //ここからダイアログ出現 59 testtext.text = "セーブされてない内容の確認"; 60 if (Save.saved==1) 61 { 62 DialogResult dr = MessageBox.Show("セーブされていないデータは削除されます。よろしいですか?", "確認", MessageBoxButtons.YesNo); 63 64 if (dr != System.Windows.Forms.DialogResult.Yes) 65 { 66 return; 67 } 68 } 69 70 testtext.text = "確認終わりダイアログ出現"; 71 72 OpenFileDialog ofd = new OpenFileDialog(); 73 ofd.Title = "csvファイルを選択してください"; 74 ofd.Filter = "csvファイル(.csv)|*.csv"; 75 76 if (ofd.ShowDialog()== DialogResult.Cancel) 77 { 78 return; 79 } 80 81 testtext.text = "処理終了"; 82 83 Add.remove(); 84 85 int cunt = 0; 86 87 ID = new List<int>(); 88 message = new List<string>(); 89 time = new List<string>(); 90 pos_x = new List<float>(); 91 pos_y = new List<float>(); 92 pos_z = new List<float>(); 93 rot_x = new List<float>(); 94 rot_y = new List<float>(); 95 rot_z = new List<float>(); 96 rot_w = new List<float>(); 97 98 99 StreamReader sr = new StreamReader(ofd.FileName, Encoding.GetEncoding("Shift_JIS")); 100 { 101 // 末尾まで繰り返す 102 while (!sr.EndOfStream) 103 { 104 // CSVファイルの一行を読み込む 105 string line = sr.ReadLine(); 106 // 読み込んだ一行をカンマ毎に分けて配列に格納する 107 string[] values = line.Split(','); 108 109 // 配列からリストに格納する 110 ID.Add(int.Parse(values[0])); 111 message.Add(values[1]); 112 time.Add(values[2]); 113 pos_x.Add(float.Parse(values[3])); 114 pos_y.Add(float.Parse(values[4])); 115 pos_z.Add(float.Parse(values[5])); 116 rot_x.Add(float.Parse(values[6])); 117 rot_y.Add(float.Parse(values[7])); 118 rot_z.Add(float.Parse(values[8])); 119 rot_w.Add(float.Parse(values[9])); 120 121 cunt++; 122 } 123 124 for (int a = 0; a < cunt; a++) 125 { 126 loadmessage(ID[a], message[a], time[a]); 127 Vector3 pos = new Vector3(pos_x[a],pos_y[a], pos_z[a]); 128 Quaternion rot = new Quaternion(rot_x[a], rot_y[a], rot_z[a], rot_w[a]); 129 Add.Collision(pos,rot,ID[a]); 130 } 131 132 Add.cun =cunt; 133 134 } 135 136 } 137 138 void loadmessage(int bangou, string adobaisu, string zikan) 139 { 140 141 GameObject obj = Instantiate(Message); 142 obj.name = "message" + bangou; 143 obj.transform.parent = list.transform; 144 145 GameObject messagetext = obj.transform.Find("messagetext").gameObject; 146 Text text1 = messagetext.GetComponentInChildren<Text>(); 147 text1.text = adobaisu; 148 149 GameObject time = obj.transform.Find("time").gameObject; 150 Text text2 = time.GetComponentInChildren<Text>(); 151 text2.text = zikan; 152 } 153} 154
試したこと
ビルド設定のapi互換レベルを.NET standerd 2.0や4.xにしたりしてみたが改善せず
unityのバージョンを変えて実行してみたが、結果は同じだった。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/06 19:15
2020/10/06 20:24