質問編集履歴

2 情報修正

apple_pie

apple_pie score 21

2018/02/10 10:57  投稿

UnityでOpenFileDialogを使用するとエラーが起きる
### 前提・実現したいこと
現在Unityにて、テクスチャファイルを選択するための『ファイルを選択』ダイアログを作成しているのですが、ダイアログを開こうとするとエラーが起きます。
ちなみに『System.Windows.Forms』は『C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll』をUnity内へインポートして使用しています。
なお、.exeとして出力した際にも使用出来るようにしたいのでUnityEditorはおやめください。  
分かる方いらっしゃいましたらご教授をよろしくお願いいたします。
### 発生している問題・エラーメッセージ
Unityエディター内
```
NullReferenceException: Object reference not set to an instance of an object
System.Windows.Forms.FileDialog.RunDialogVista (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.OnBeforeVistaDialog (System.Windows.Forms.FileDialogNative+IFileDialog dialog) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.RunDialogVista (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.RunDialog (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.CommonDialog.ShowDialog (System.Windows.Forms.IWin32Window owner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.CommonDialog.ShowDialog () (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
(wrapper remoting-invoke-with-check) System.Windows.Forms.CommonDialog:ShowDialog ()
Test.OpenTextureFile () (at Assets/Test/Scripts/Test.cs:93)
Test.OpenTextureFile () (at Assets/Test/Scripts/Test.cs:6)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:165)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
```
### 該当のソースコード
### 該当のソースコード(Test.cs)
```C#
   public void OpenTextureFile(){
       OpenFileDialog ofd = new OpenFileDialog ();
       ofd.InitialDirectory = UnityEngine.Application.dataPath;
       ofd.Filter = "テクスチャ(*.png)|*.png";
       ofd.Title = "テクスチャを選択してください";
       if (ofd.ShowDialog () == DialogResult.OK) {
           Debug.Log (ofd.FileName);
       }
   }
1   public void OpenTextureFile(){
2       OpenFileDialog ofd = new OpenFileDialog ();
3       ofd.InitialDirectory = UnityEngine.Application.dataPath;
4       ofd.Filter = "テクスチャ(*.png)|*.png";
5       ofd.Title = "テクスチャを選択してください";
6       if (ofd.ShowDialog () == DialogResult.OK) {
7           Debug.Log (ofd.FileName);
8       }
9   }
```
### 補足情報(FW/ツールのバージョンなど)
Unityバージョン:2017.3.0.f3
  • C#

    13764 questions

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

  • Unity

    9644 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity2D

    2331 questions

1 タイトルを修正しました

apple_pie

apple_pie score 21

2018/02/04 03:37  投稿

### 前提・実現したいこと
現在Unityにて、テクスチャファイルを選択するための『ファイルを選択』ダイアログを作成しているのですが、ダイアログを開こうとするとエラーが起きます。
ちなみに『System.Windows.Forms』は『C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll』をUnity内へインポートして使用しています。
分かる方いらっしゃいましたらご教授をよろしくお願いいたします。
### 発生している問題・エラーメッセージ
Unityエディター内
```
NullReferenceException: Object reference not set to an instance of an object
System.Windows.Forms.FileDialog.RunDialogVista (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.OnBeforeVistaDialog (System.Windows.Forms.FileDialogNative+IFileDialog dialog) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.RunDialogVista (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.FileDialog.RunDialog (System.IntPtr hWndOwner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.CommonDialog.ShowDialog (System.Windows.Forms.IWin32Window owner) (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
System.Windows.Forms.CommonDialog.ShowDialog () (at <5ab40f17fbbd42bc88c36ef7ce6a3719>:0)
(wrapper remoting-invoke-with-check) System.Windows.Forms.CommonDialog:ShowDialog ()
Test.OpenTextureFile () (at Assets/Test/Scripts/Test.cs:93)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:165)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
```
### 該当のソースコード
```C#
public void OpenTextureFile(){
OpenFileDialog ofd = new OpenFileDialog ();
ofd.InitialDirectory = UnityEngine.Application.dataPath;
ofd.Filter = "テクスチャ(*.png)|*.png";
ofd.Title = "テクスチャを選択してください";
if (ofd.ShowDialog () == DialogResult.OK) {
Debug.Log (ofd.FileName);
}
}
```
### 補足情報(FW/ツールのバージョンなど)
Unityバージョン:2017.3.0.f3
  • C#

    13764 questions

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

  • Unity

    9644 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity2D

    2331 questions

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る