yasirkula / UnitySimpleFileBrowser

A uGUI based runtime file browser for Unity 3D (draggable and resizable)
MIT License
819 stars 111 forks source link

NullReferenceException on Unity 2019.4.1 #30

Closed malody2014 closed 3 years ago

malody2014 commented 3 years ago

Description of the bug

NullReferenceException: Object reference not set to an instance of an object SimpleFileBrowser.RecycledListView.UpdateList () (at Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/RecycledListView.cs:55) SimpleFileBrowser.FileBrowser.RefreshFiles (System.Boolean pathChanged) (at Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs:1420) SimpleFileBrowser.FileBrowser.OnShowHiddenFilesToggleChanged () (at Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs:1071) UnityEngine.Events.InvokableCall.Invoke () (at <4eca0aa85b9643a199169bb7e91fc8d3>:0) UnityEngine.Events.UnityEvent`1[T0].Invoke (T0 arg0) (at <4eca0aa85b9643a199169bb7e91fc8d3>:0) UnityEngine.UI.Toggle.Rebuild (UnityEngine.UI.CanvasUpdate executing) (at D:/unity/2019.4.0f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Toggle.cs:130) UnityEngine.UI.CanvasUpdateRegistry.PerformUpdate () (at D:/unity/2019.4.0f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/CanvasUpdateRegistry.cs:177) UnityEngine.UI.ScrollRect:LateUpdate() (at D:/unity/2019.4.0f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/ScrollRect.cs:805)

Reproduction steps

FileBrowser.ShowLoadDialog((paths => {
                //todo
}), () => {
                //todo
});

Platform specs

Please provide the following info if this is a Unity 3D repository.

Additional info

Please check Logcat (Android) or Xcode console (iOS) for any meaningful error messages and include them here.

yasirkula commented 3 years ago

The closest setup I have is Unity 2019.4.0f1 on Windows and I can't reproduce this issue with these reproduction steps. And frankly, it should be impossible to encounter this Issue. Let's see why:

which is inside here: https://github.com/yasirkula/UnitySimpleFileBrowser/blob/52ecce6f020250e4f281957bf92404d457cf0ec0/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs#L536

Awake is called before any other functions. If there was an exception that interrupted Awake, this error would be possible but you didn't mention any in the Issue description.

Are there any other steps that you didn't mention in Reproduction steps? You should create a new Unity project, import the plugin there and take note of every step you take until you can reproduce this issue and report all of these steps in Reproduction steps.

artur-ag commented 3 years ago

I'm finding the same error with version 1.4.1, running in Unity 2020.2.1f1 on Windows 10. It happens one single time, when the scene starts, even before I invoke the file browser. But after that, everything works as expected: I can open the browser, select a file, etc.

@yasirkula from what you say, it makes sense that it happens, because during the start of my scene, I don't invoke any file browser, so the Awake method doesn't have a chance to run. But somehow Unity itself is invoking something that runs SimpleFileBrowser.FileBrowser.OnShowHiddenFilesToggleChanged.

I already have an EventSystem in my scene, so I disabled the EventSystem gameobject inside SimpleFileBrowserCanvas. I didn't try it in an empty scene without an existing EventSystem... could that be it? The already-existing EventSystem is triggering the toggle changed event?

artur-ag commented 3 years ago

I restarted Unity and now I can't reproduce the bug anymore... I'm not sure what fixed it, because I didn't change anything in my setup. Maybe it was because I imported a new version of Runtime File Browser without deleting all the files from the previous one.

yasirkula commented 3 years ago

I don't think it is related to EventSystem. Do you have an instance of SimpleFileBrowserCanvas object in your scene? If so, is it active? Did you modify it in any way?

artur-ag commented 3 years ago

Not during the start of the scene, no, it gets created when I invoke the file browser by clicking on a UI button in my own Canvas. ~But when I was getting the error yesterday, I can't remember if the SimpleFileBrowserCanvas object was there from the beginning or not, and now I can't reproduce the exception.~

I did two changes in the SimpleFileBrowserCanvas: I disabled the EventSystem, because I already have one in my scene, and changed the CanvasScaler reference resolution.

EDIT: I managed to reproduce the bug!! It happened while I started the game in the editor while having the SimpleFileBrowserCanvas prefab opened in Prefab mode. Here are the steps to reproduce it in Unity 2020.2.1f1:

  1. Create an empty scene (I tried with my existing scene and with an empty one, and it happened both times).
  2. Double-click SimpleFileBrowserCanvas.prefab in the Project panel. This will open it in Prefab mode, and makes the scene panel background blue.
  3. With the prefab still open, press Play.
  4. The following exception occurs right after starting:
    NullReferenceException: Object reference not set to an instance of an object
    SimpleFileBrowser.RecycledListView.UpdateList () (at Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/RecycledListView.cs:55)
    SimpleFileBrowser.FileBrowser.RefreshFiles (System.Boolean pathChanged) (at Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs:1621)
    SimpleFileBrowser.FileBrowser.OnShowHiddenFilesToggleChanged () (at Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs:1266)
    UnityEngine.Events.InvokableCall.Invoke () (at <e414e10bfe5f45729ff122f3359de21b>:0)
    UnityEngine.Events.UnityEvent`1[T0].Invoke (T0 arg0) (at <e414e10bfe5f45729ff122f3359de21b>:0)
    UnityEngine.UI.Toggle.Rebuild (UnityEngine.UI.CanvasUpdate executing) (at C:/Program Files/Unity/Hub/Editor/2020.2.1f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Toggle.cs:130)
    UnityEngine.UI.CanvasUpdateRegistry.PerformUpdate () (at C:/Program Files/Unity/Hub/Editor/2020.2.1f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/CanvasUpdateRegistry.cs:182)
    UnityEngine.UI.ScrollRect:LateUpdate() (at C:/Program Files/Unity/Hub/Editor/2020.2.1f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/ScrollRect.cs:808)

I must've had the prefab mode open yesterday and didn't realize it.

yasirkula commented 3 years ago

Awesome! I was able to reproduce the error on 2018.4, too.