├── .gitignore ├── Assets ├── Plugins.meta ├── Plugins │ ├── SimpleFileBrowser.meta │ └── SimpleFileBrowser │ │ ├── Android.meta │ │ ├── Android │ │ ├── FBCallbackHelper.cs │ │ ├── FBCallbackHelper.cs.meta │ │ ├── FBDirectoryReceiveCallbackAndroid.cs │ │ ├── FBDirectoryReceiveCallbackAndroid.cs.meta │ │ ├── FBPermissionCallbackAndroid.cs │ │ ├── FBPermissionCallbackAndroid.cs.meta │ │ ├── SimpleFileBrowser.jar │ │ └── SimpleFileBrowser.jar.meta │ │ ├── Prefabs.meta │ │ ├── Prefabs │ │ ├── SimpleFileBrowserItem.prefab │ │ ├── SimpleFileBrowserItem.prefab.meta │ │ ├── SimpleFileBrowserQuickLink.prefab │ │ └── SimpleFileBrowserQuickLink.prefab.meta │ │ ├── README.txt │ │ ├── README.txt.meta │ │ ├── Resources.meta │ │ ├── Resources │ │ ├── SimpleFileBrowserCanvas.prefab │ │ └── SimpleFileBrowserCanvas.prefab.meta │ │ ├── Scripts.meta │ │ ├── Scripts │ │ ├── FileBrowser.cs │ │ ├── FileBrowser.cs.meta │ │ ├── FileBrowserHelpers.cs │ │ ├── FileBrowserHelpers.cs.meta │ │ ├── FileBrowserItem.cs │ │ ├── FileBrowserItem.cs.meta │ │ ├── FileBrowserMovement.cs │ │ ├── FileBrowserMovement.cs.meta │ │ ├── FileBrowserQuickLink.cs │ │ ├── FileBrowserQuickLink.cs.meta │ │ ├── SimpleRecycledListView.meta │ │ └── SimpleRecycledListView │ │ │ ├── IListViewAdapter.cs │ │ │ ├── IListViewAdapter.cs.meta │ │ │ ├── ListItem.cs │ │ │ ├── ListItem.cs.meta │ │ │ ├── RecycledListView.cs │ │ │ └── RecycledListView.cs.meta │ │ ├── Sprites.meta │ │ └── Sprites │ │ ├── Checkmark.psd │ │ ├── Checkmark.psd.meta │ │ ├── DefaultFileIcon.png │ │ ├── DefaultFileIcon.png.meta │ │ ├── DriveIcon.png │ │ ├── DriveIcon.png.meta │ │ ├── DropdownArrow.psd │ │ ├── DropdownArrow.psd.meta │ │ ├── FolderIcon.png │ │ ├── FolderIcon.png.meta │ │ ├── ForwardArrow.psd │ │ ├── ForwardArrow.psd.meta │ │ ├── ImageFileIcon.png │ │ ├── ImageFileIcon.png.meta │ │ ├── SimpleFileBrowserDrag.psd │ │ ├── SimpleFileBrowserDrag.psd.meta │ │ ├── SimpleFileBrowserSlicedBackground1.psd │ │ ├── SimpleFileBrowserSlicedBackground1.psd.meta │ │ ├── SimpleFileBrowserSlicedBackground2.psd │ │ ├── SimpleFileBrowserSlicedBackground2.psd.meta │ │ ├── SimpleFileBrowserSlicedBackground3.psd │ │ ├── SimpleFileBrowserSlicedBackground3.psd.meta │ │ ├── SimpleFileBrowserSlicedBackground4.psd │ │ ├── SimpleFileBrowserSlicedBackground4.psd.meta │ │ ├── SimpleFileBrowserSlicedBackground5.psd │ │ ├── SimpleFileBrowserSlicedBackground5.psd.meta │ │ ├── TextFileIcon.png │ │ └── TextFileIcon.png.meta ├── Scenes.meta ├── Scenes │ ├── MeshLoader.unity │ └── MeshLoader.unity.meta ├── Scripts.meta └── Scripts │ ├── CameraController.cs │ ├── CameraController.cs.meta │ ├── SceneController.cs │ └── SceneController.cs.meta ├── Examples ├── collada │ ├── ANYmalA │ │ ├── anymal_base_2.dae │ │ ├── anymal_hip.dae │ │ ├── anymal_optoforce.dae │ │ ├── anymal_shank_2_LF.dae │ │ ├── anymal_shank_2_LH.dae │ │ ├── anymal_shank_2_RF.dae │ │ ├── anymal_shank_2_RH.dae │ │ ├── anymal_thigh.dae │ │ ├── robot.urdf │ │ ├── robot_energy.urdf │ │ └── robot_nomesh_nocol.urdf │ ├── ANYmalB │ │ ├── LICENSE │ │ ├── anymal.urdf │ │ ├── anymal_base.dae │ │ ├── anymal_foot.dae │ │ ├── anymal_hip_l.dae │ │ ├── anymal_hip_r.dae │ │ ├── anymal_shank_l.dae │ │ ├── anymal_shank_r.dae │ │ ├── anymal_thigh_l.dae │ │ ├── anymal_thigh_r.dae │ │ ├── base_uv_texture.jpg │ │ ├── carbon_uv_texture.jpg │ │ └── sphere.obj │ └── Collada │ │ └── collada.dae └── obj │ └── Monkey │ ├── LICENSE │ ├── LICENSE.meta │ ├── monkey.obj │ └── monkey.obj.meta ├── Images └── quickstart.gif ├── LICENSE ├── Packages └── manifest.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset └── XRSettings.asset └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/unity,rider 2 | # Edit at https://www.gitignore.io/?templates=unity,rider 3 | 4 | ### Rider ### 5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 7 | 8 | # User-specific stuff 9 | .idea/**/workspace.xml 10 | .idea/**/tasks.xml 11 | .idea/**/usage.statistics.xml 12 | .idea/**/dictionaries 13 | .idea/**/shelf 14 | 15 | # Generated files 16 | .idea/**/contentModel.xml 17 | 18 | # Sensitive or high-churn files 19 | .idea/**/dataSources/ 20 | .idea/**/dataSources.ids 21 | .idea/**/dataSources.local.xml 22 | .idea/**/sqlDataSources.xml 23 | .idea/**/dynamic.xml 24 | .idea/**/uiDesigner.xml 25 | .idea/**/dbnavigator.xml 26 | 27 | # Gradle 28 | .idea/**/gradle.xml 29 | .idea/**/libraries 30 | 31 | # Gradle and Maven with auto-import 32 | # When using Gradle or Maven with auto-import, you should exclude module files, 33 | # since they will be recreated, and may cause churn. Uncomment if using 34 | # auto-import. 35 | # .idea/modules.xml 36 | # .idea/*.iml 37 | # .idea/modules 38 | # *.iml 39 | # *.ipr 40 | 41 | # CMake 42 | cmake-build-*/ 43 | 44 | # Mongo Explorer plugin 45 | .idea/**/mongoSettings.xml 46 | 47 | # File-based project format 48 | *.iws 49 | 50 | # IntelliJ 51 | out/ 52 | 53 | # mpeltonen/sbt-idea plugin 54 | .idea_modules/ 55 | 56 | # JIRA plugin 57 | atlassian-ide-plugin.xml 58 | 59 | # Cursive Clojure plugin 60 | .idea/replstate.xml 61 | 62 | # Crashlytics plugin (for Android Studio and IntelliJ) 63 | com_crashlytics_export_strings.xml 64 | crashlytics.properties 65 | crashlytics-build.properties 66 | fabric.properties 67 | 68 | # Editor-based Rest Client 69 | .idea/httpRequests 70 | 71 | # Android studio 3.1+ serialized cache file 72 | .idea/caches/build_file_checksums.ser 73 | 74 | ### Unity ### 75 | # This .gitignore file should be placed at the root of your Unity project directory 76 | # 77 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 78 | /[Ll]ibrary/ 79 | /[Tt]emp/ 80 | /[Oo]bj/ 81 | /[Bb]uild/ 82 | /[Bb]uilds/ 83 | /[Ll]ogs/ 84 | /[Mm]emoryCaptures/ 85 | 86 | # Never ignore Asset meta data 87 | !/[Aa]ssets/**/*.meta 88 | 89 | # Uncomment this line if you wish to ignore the asset store tools plugin 90 | # /[Aa]ssets/AssetStoreTools* 91 | 92 | # TextMesh Pro files 93 | [Aa]ssets/TextMesh*Pro/ 94 | 95 | # Autogenerated Jetbrains Rider plugin 96 | [Aa]ssets/Plugins/Editor/JetBrains* 97 | 98 | # Visual Studio cache directory 99 | .vs/ 100 | 101 | # Gradle cache directory 102 | .gradle/ 103 | 104 | # Autogenerated VS/MD/Consulo solution and project files 105 | ExportedObj/ 106 | .consulo/ 107 | *.csproj 108 | *.unityproj 109 | *.sln 110 | *.suo 111 | *.tmp 112 | *.user 113 | *.userprefs 114 | *.pidb 115 | *.booproj 116 | *.svd 117 | *.pdb 118 | *.mdb 119 | *.opendb 120 | *.VC.db 121 | 122 | # Unity3D generated meta files 123 | *.pidb.meta 124 | *.pdb.meta 125 | *.mdb.meta 126 | 127 | # Unity3D generated file on crash reports 128 | sysinfo.txt 129 | 130 | # Builds 131 | *.apk 132 | *.unitypackage 133 | *.symbols.zip 134 | 135 | # Crashlytics generated file 136 | 137 | 138 | # End of https://www.gitignore.io/api/unity,rider 139 | 140 | # Rider 141 | .idea/ -------------------------------------------------------------------------------- /Assets/Plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5674a5831716d08da90f7ef8b21cf36b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6440a5f3157375d469774ee0793ec07b 3 | folderAsset: yes 4 | timeCreated: 1479413187 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ff366e107d0770a41a2afe8ad87ef708 3 | folderAsset: yes 4 | timeCreated: 1509396159 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBCallbackHelper.cs: -------------------------------------------------------------------------------- 1 | #if !UNITY_EDITOR && UNITY_ANDROID 2 | using UnityEngine; 3 | 4 | namespace SimpleFileBrowser 5 | { 6 | public class FBCallbackHelper : MonoBehaviour 7 | { 8 | private System.Action mainThreadAction = null; 9 | 10 | private void Awake() 11 | { 12 | DontDestroyOnLoad( gameObject ); 13 | } 14 | 15 | private void Update() 16 | { 17 | if( mainThreadAction != null ) 18 | { 19 | System.Action temp = mainThreadAction; 20 | mainThreadAction = null; 21 | temp(); 22 | } 23 | } 24 | 25 | public void CallOnMainThread( System.Action function ) 26 | { 27 | mainThreadAction = function; 28 | } 29 | } 30 | } 31 | #endif -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBCallbackHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 997bfc59716c24c41ad03bcbd7f8ef0a 3 | timeCreated: 1570918076 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBDirectoryReceiveCallbackAndroid.cs: -------------------------------------------------------------------------------- 1 | #if !UNITY_EDITOR && UNITY_ANDROID 2 | using UnityEngine; 3 | 4 | namespace SimpleFileBrowser 5 | { 6 | public class FBDirectoryReceiveCallbackAndroid : AndroidJavaProxy 7 | { 8 | private readonly FileBrowser.DirectoryPickCallback callback; 9 | private readonly FBCallbackHelper callbackHelper; 10 | 11 | public FBDirectoryReceiveCallbackAndroid( FileBrowser.DirectoryPickCallback callback ) : base( "com.yasirkula.unity.FileBrowserDirectoryReceiver" ) 12 | { 13 | this.callback = callback; 14 | callbackHelper = new GameObject( "FBCallbackHelper" ).AddComponent(); 15 | } 16 | 17 | public void OnDirectoryPicked( string rawUri, string name ) 18 | { 19 | callbackHelper.CallOnMainThread( () => DirectoryPickedCallback( rawUri, name ) ); 20 | } 21 | 22 | private void DirectoryPickedCallback( string rawUri, string name ) 23 | { 24 | try 25 | { 26 | if( callback != null ) 27 | callback( rawUri, name ); 28 | } 29 | finally 30 | { 31 | Object.Destroy( callbackHelper ); 32 | } 33 | } 34 | } 35 | } 36 | #endif -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBDirectoryReceiveCallbackAndroid.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8dec4dc5be16ca84e9c147627361671d 3 | timeCreated: 1520199471 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBPermissionCallbackAndroid.cs: -------------------------------------------------------------------------------- 1 | #if !UNITY_EDITOR && UNITY_ANDROID 2 | using System.Threading; 3 | using UnityEngine; 4 | 5 | namespace SimpleFileBrowser 6 | { 7 | public class FBPermissionCallbackAndroid : AndroidJavaProxy 8 | { 9 | private object threadLock; 10 | public int Result { get; private set; } 11 | 12 | public FBPermissionCallbackAndroid( object threadLock ) : base( "com.yasirkula.unity.FileBrowserPermissionReceiver" ) 13 | { 14 | Result = -1; 15 | this.threadLock = threadLock; 16 | } 17 | 18 | public void OnPermissionResult( int result ) 19 | { 20 | Result = result; 21 | 22 | lock( threadLock ) 23 | { 24 | Monitor.Pulse( threadLock ); 25 | } 26 | } 27 | } 28 | } 29 | #endif -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/FBPermissionCallbackAndroid.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2cd91db0ba676ef47af67e3597037d1a 3 | timeCreated: 1520199471 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/SimpleFileBrowser.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Android/SimpleFileBrowser.jar -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Android/SimpleFileBrowser.jar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 912e8e35fbd849844b7aa2a6a00db170 3 | timeCreated: 1520240264 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 2 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | isOverridable: 0 11 | platformData: 12 | data: 13 | first: 14 | Android: Android 15 | second: 16 | enabled: 1 17 | settings: {} 18 | data: 19 | first: 20 | Any: 21 | second: 22 | enabled: 0 23 | settings: {} 24 | data: 25 | first: 26 | Editor: Editor 27 | second: 28 | enabled: 0 29 | settings: 30 | DefaultValueInitialized: true 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 53eaeb5abaee5aa4ca7f07beacb73c2e 3 | folderAsset: yes 4 | timeCreated: 1479489583 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Prefabs/SimpleFileBrowserItem.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1000011646011302} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1000010981689570 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 4 20 | m_Component: 21 | - 224: {fileID: 224000013702633820} 22 | - 222: {fileID: 222000010857273394} 23 | - 114: {fileID: 114000013995033306} 24 | m_Layer: 5 25 | m_Name: Name 26 | m_TagString: Untagged 27 | m_Icon: {fileID: 0} 28 | m_NavMeshLayer: 0 29 | m_StaticEditorFlags: 0 30 | m_IsActive: 1 31 | --- !u!1 &1000011646011302 32 | GameObject: 33 | m_ObjectHideFlags: 0 34 | m_PrefabParentObject: {fileID: 0} 35 | m_PrefabInternal: {fileID: 100100000} 36 | serializedVersion: 4 37 | m_Component: 38 | - 224: {fileID: 224000013952242090} 39 | - 222: {fileID: 222000013410998874} 40 | - 114: {fileID: 114000012602770182} 41 | - 114: {fileID: 114000012265032802} 42 | m_Layer: 5 43 | m_Name: SimpleFileBrowserItem 44 | m_TagString: Untagged 45 | m_Icon: {fileID: 0} 46 | m_NavMeshLayer: 0 47 | m_StaticEditorFlags: 0 48 | m_IsActive: 1 49 | --- !u!1 &1000013967986654 50 | GameObject: 51 | m_ObjectHideFlags: 0 52 | m_PrefabParentObject: {fileID: 0} 53 | m_PrefabInternal: {fileID: 100100000} 54 | serializedVersion: 4 55 | m_Component: 56 | - 224: {fileID: 224000012393993334} 57 | - 222: {fileID: 222000012809932278} 58 | - 114: {fileID: 114000013208375990} 59 | m_Layer: 5 60 | m_Name: Icon 61 | m_TagString: Untagged 62 | m_Icon: {fileID: 0} 63 | m_NavMeshLayer: 0 64 | m_StaticEditorFlags: 0 65 | m_IsActive: 1 66 | --- !u!114 &114000012265032802 67 | MonoBehaviour: 68 | m_ObjectHideFlags: 1 69 | m_PrefabParentObject: {fileID: 0} 70 | m_PrefabInternal: {fileID: 100100000} 71 | m_GameObject: {fileID: 1000011646011302} 72 | m_Enabled: 1 73 | m_EditorHideFlags: 0 74 | m_Script: {fileID: 11500000, guid: b5f1b2825c50f7b4d9be146ab2137bff, type: 3} 75 | m_Name: 76 | m_EditorClassIdentifier: 77 | background: {fileID: 114000012602770182} 78 | icon: {fileID: 114000013208375990} 79 | nameText: {fileID: 114000013995033306} 80 | --- !u!114 &114000012602770182 81 | MonoBehaviour: 82 | m_ObjectHideFlags: 1 83 | m_PrefabParentObject: {fileID: 0} 84 | m_PrefabInternal: {fileID: 100100000} 85 | m_GameObject: {fileID: 1000011646011302} 86 | m_Enabled: 1 87 | m_EditorHideFlags: 0 88 | m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 89 | m_Name: 90 | m_EditorClassIdentifier: 91 | m_Material: {fileID: 0} 92 | m_Color: {r: 1, g: 1, b: 1, a: 1} 93 | m_RaycastTarget: 1 94 | m_OnCullStateChanged: 95 | m_PersistentCalls: 96 | m_Calls: [] 97 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 98 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 99 | m_Sprite: {fileID: 21300000, guid: 6ff773ea42aedd04c8bb96a1fe9a73b8, type: 3} 100 | m_Type: 1 101 | m_PreserveAspect: 0 102 | m_FillCenter: 1 103 | m_FillMethod: 4 104 | m_FillAmount: 1 105 | m_FillClockwise: 1 106 | m_FillOrigin: 0 107 | --- !u!114 &114000013208375990 108 | MonoBehaviour: 109 | m_ObjectHideFlags: 1 110 | m_PrefabParentObject: {fileID: 0} 111 | m_PrefabInternal: {fileID: 100100000} 112 | m_GameObject: {fileID: 1000013967986654} 113 | m_Enabled: 1 114 | m_EditorHideFlags: 0 115 | m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 116 | m_Name: 117 | m_EditorClassIdentifier: 118 | m_Material: {fileID: 0} 119 | m_Color: {r: 1, g: 1, b: 1, a: 1} 120 | m_RaycastTarget: 0 121 | m_OnCullStateChanged: 122 | m_PersistentCalls: 123 | m_Calls: [] 124 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 125 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 126 | m_Sprite: {fileID: 0} 127 | m_Type: 0 128 | m_PreserveAspect: 1 129 | m_FillCenter: 1 130 | m_FillMethod: 4 131 | m_FillAmount: 1 132 | m_FillClockwise: 1 133 | m_FillOrigin: 0 134 | --- !u!114 &114000013995033306 135 | MonoBehaviour: 136 | m_ObjectHideFlags: 1 137 | m_PrefabParentObject: {fileID: 0} 138 | m_PrefabInternal: {fileID: 100100000} 139 | m_GameObject: {fileID: 1000010981689570} 140 | m_Enabled: 1 141 | m_EditorHideFlags: 0 142 | m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 143 | m_Name: 144 | m_EditorClassIdentifier: 145 | m_Material: {fileID: 0} 146 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 147 | m_RaycastTarget: 0 148 | m_OnCullStateChanged: 149 | m_PersistentCalls: 150 | m_Calls: [] 151 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 152 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 153 | m_FontData: 154 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 155 | m_FontSize: 14 156 | m_FontStyle: 0 157 | m_BestFit: 0 158 | m_MinSize: 10 159 | m_MaxSize: 40 160 | m_Alignment: 3 161 | m_AlignByGeometry: 0 162 | m_RichText: 1 163 | m_HorizontalOverflow: 0 164 | m_VerticalOverflow: 0 165 | m_LineSpacing: 1 166 | m_Text: Filename 167 | --- !u!222 &222000010857273394 168 | CanvasRenderer: 169 | m_ObjectHideFlags: 1 170 | m_PrefabParentObject: {fileID: 0} 171 | m_PrefabInternal: {fileID: 100100000} 172 | m_GameObject: {fileID: 1000010981689570} 173 | --- !u!222 &222000012809932278 174 | CanvasRenderer: 175 | m_ObjectHideFlags: 1 176 | m_PrefabParentObject: {fileID: 0} 177 | m_PrefabInternal: {fileID: 100100000} 178 | m_GameObject: {fileID: 1000013967986654} 179 | --- !u!222 &222000013410998874 180 | CanvasRenderer: 181 | m_ObjectHideFlags: 1 182 | m_PrefabParentObject: {fileID: 0} 183 | m_PrefabInternal: {fileID: 100100000} 184 | m_GameObject: {fileID: 1000011646011302} 185 | --- !u!224 &224000012393993334 186 | RectTransform: 187 | m_ObjectHideFlags: 1 188 | m_PrefabParentObject: {fileID: 0} 189 | m_PrefabInternal: {fileID: 100100000} 190 | m_GameObject: {fileID: 1000013967986654} 191 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 192 | m_LocalPosition: {x: 0, y: 0, z: 0} 193 | m_LocalScale: {x: 1, y: 1, z: 1} 194 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 195 | m_Children: [] 196 | m_Father: {fileID: 224000013952242090} 197 | m_RootOrder: 0 198 | m_AnchorMin: {x: 0, y: 0} 199 | m_AnchorMax: {x: 0, y: 1} 200 | m_AnchoredPosition: {x: 19, y: 0} 201 | m_SizeDelta: {x: 30, y: -6} 202 | m_Pivot: {x: 0.5, y: 0.5} 203 | --- !u!224 &224000013702633820 204 | RectTransform: 205 | m_ObjectHideFlags: 1 206 | m_PrefabParentObject: {fileID: 0} 207 | m_PrefabInternal: {fileID: 100100000} 208 | m_GameObject: {fileID: 1000010981689570} 209 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 210 | m_LocalPosition: {x: 0, y: 0, z: 0} 211 | m_LocalScale: {x: 1, y: 1, z: 1} 212 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 213 | m_Children: [] 214 | m_Father: {fileID: 224000013952242090} 215 | m_RootOrder: 1 216 | m_AnchorMin: {x: 0, y: 0} 217 | m_AnchorMax: {x: 1, y: 1} 218 | m_AnchoredPosition: {x: 19, y: 0} 219 | m_SizeDelta: {x: -38, y: -4} 220 | m_Pivot: {x: 0.5, y: 0.5} 221 | --- !u!224 &224000013952242090 222 | RectTransform: 223 | m_ObjectHideFlags: 1 224 | m_PrefabParentObject: {fileID: 0} 225 | m_PrefabInternal: {fileID: 100100000} 226 | m_GameObject: {fileID: 1000011646011302} 227 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 228 | m_LocalPosition: {x: 0, y: 0, z: 0} 229 | m_LocalScale: {x: 1, y: 1, z: 1} 230 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 231 | m_Children: 232 | - {fileID: 224000012393993334} 233 | - {fileID: 224000013702633820} 234 | m_Father: {fileID: 0} 235 | m_RootOrder: 0 236 | m_AnchorMin: {x: 0, y: 1} 237 | m_AnchorMax: {x: 1, y: 1} 238 | m_AnchoredPosition: {x: 0, y: 0} 239 | m_SizeDelta: {x: 0, y: 30} 240 | m_Pivot: {x: 0, y: 1} 241 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Prefabs/SimpleFileBrowserItem.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2db22c1e3cd2584fa0e9168745a4536 3 | timeCreated: 1479415743 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Prefabs/SimpleFileBrowserQuickLink.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &100100000 4 | Prefab: 5 | m_ObjectHideFlags: 1 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: [] 10 | m_RemovedComponents: [] 11 | m_ParentPrefab: {fileID: 0} 12 | m_RootGameObject: {fileID: 1000011646011302} 13 | m_IsPrefabParent: 1 14 | --- !u!1 &1000010981689570 15 | GameObject: 16 | m_ObjectHideFlags: 0 17 | m_PrefabParentObject: {fileID: 0} 18 | m_PrefabInternal: {fileID: 100100000} 19 | serializedVersion: 4 20 | m_Component: 21 | - 224: {fileID: 224000013702633820} 22 | - 222: {fileID: 222000010857273394} 23 | - 114: {fileID: 114000013995033306} 24 | m_Layer: 5 25 | m_Name: Name 26 | m_TagString: Untagged 27 | m_Icon: {fileID: 0} 28 | m_NavMeshLayer: 0 29 | m_StaticEditorFlags: 0 30 | m_IsActive: 1 31 | --- !u!1 &1000011646011302 32 | GameObject: 33 | m_ObjectHideFlags: 0 34 | m_PrefabParentObject: {fileID: 0} 35 | m_PrefabInternal: {fileID: 100100000} 36 | serializedVersion: 4 37 | m_Component: 38 | - 224: {fileID: 224000013952242090} 39 | - 222: {fileID: 222000013410998874} 40 | - 114: {fileID: 114000012602770182} 41 | - 114: {fileID: 114000012163346592} 42 | m_Layer: 5 43 | m_Name: SimpleFileBrowserQuickLink 44 | m_TagString: Untagged 45 | m_Icon: {fileID: 0} 46 | m_NavMeshLayer: 0 47 | m_StaticEditorFlags: 0 48 | m_IsActive: 1 49 | --- !u!1 &1000013967986654 50 | GameObject: 51 | m_ObjectHideFlags: 0 52 | m_PrefabParentObject: {fileID: 0} 53 | m_PrefabInternal: {fileID: 100100000} 54 | serializedVersion: 4 55 | m_Component: 56 | - 224: {fileID: 224000012393993334} 57 | - 222: {fileID: 222000012809932278} 58 | - 114: {fileID: 114000013208375990} 59 | m_Layer: 5 60 | m_Name: Icon 61 | m_TagString: Untagged 62 | m_Icon: {fileID: 0} 63 | m_NavMeshLayer: 0 64 | m_StaticEditorFlags: 0 65 | m_IsActive: 1 66 | --- !u!114 &114000012163346592 67 | MonoBehaviour: 68 | m_ObjectHideFlags: 1 69 | m_PrefabParentObject: {fileID: 0} 70 | m_PrefabInternal: {fileID: 100100000} 71 | m_GameObject: {fileID: 1000011646011302} 72 | m_Enabled: 1 73 | m_EditorHideFlags: 0 74 | m_Script: {fileID: 11500000, guid: 1f277f5418eabf94cad94208055878af, type: 3} 75 | m_Name: 76 | m_EditorClassIdentifier: 77 | background: {fileID: 114000012602770182} 78 | icon: {fileID: 114000013208375990} 79 | nameText: {fileID: 114000013995033306} 80 | --- !u!114 &114000012602770182 81 | MonoBehaviour: 82 | m_ObjectHideFlags: 1 83 | m_PrefabParentObject: {fileID: 0} 84 | m_PrefabInternal: {fileID: 100100000} 85 | m_GameObject: {fileID: 1000011646011302} 86 | m_Enabled: 1 87 | m_EditorHideFlags: 0 88 | m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 89 | m_Name: 90 | m_EditorClassIdentifier: 91 | m_Material: {fileID: 0} 92 | m_Color: {r: 1, g: 1, b: 1, a: 1} 93 | m_RaycastTarget: 1 94 | m_OnCullStateChanged: 95 | m_PersistentCalls: 96 | m_Calls: [] 97 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 98 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 99 | m_Sprite: {fileID: 21300000, guid: 6ff773ea42aedd04c8bb96a1fe9a73b8, type: 3} 100 | m_Type: 1 101 | m_PreserveAspect: 0 102 | m_FillCenter: 1 103 | m_FillMethod: 4 104 | m_FillAmount: 1 105 | m_FillClockwise: 1 106 | m_FillOrigin: 0 107 | --- !u!114 &114000013208375990 108 | MonoBehaviour: 109 | m_ObjectHideFlags: 1 110 | m_PrefabParentObject: {fileID: 0} 111 | m_PrefabInternal: {fileID: 100100000} 112 | m_GameObject: {fileID: 1000013967986654} 113 | m_Enabled: 1 114 | m_EditorHideFlags: 0 115 | m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 116 | m_Name: 117 | m_EditorClassIdentifier: 118 | m_Material: {fileID: 0} 119 | m_Color: {r: 1, g: 1, b: 1, a: 1} 120 | m_RaycastTarget: 0 121 | m_OnCullStateChanged: 122 | m_PersistentCalls: 123 | m_Calls: [] 124 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 125 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 126 | m_Sprite: {fileID: 0} 127 | m_Type: 0 128 | m_PreserveAspect: 1 129 | m_FillCenter: 1 130 | m_FillMethod: 4 131 | m_FillAmount: 1 132 | m_FillClockwise: 1 133 | m_FillOrigin: 0 134 | --- !u!114 &114000013995033306 135 | MonoBehaviour: 136 | m_ObjectHideFlags: 1 137 | m_PrefabParentObject: {fileID: 0} 138 | m_PrefabInternal: {fileID: 100100000} 139 | m_GameObject: {fileID: 1000010981689570} 140 | m_Enabled: 1 141 | m_EditorHideFlags: 0 142 | m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} 143 | m_Name: 144 | m_EditorClassIdentifier: 145 | m_Material: {fileID: 0} 146 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 147 | m_RaycastTarget: 0 148 | m_OnCullStateChanged: 149 | m_PersistentCalls: 150 | m_Calls: [] 151 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 152 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 153 | m_FontData: 154 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 155 | m_FontSize: 14 156 | m_FontStyle: 0 157 | m_BestFit: 0 158 | m_MinSize: 10 159 | m_MaxSize: 40 160 | m_Alignment: 3 161 | m_AlignByGeometry: 0 162 | m_RichText: 1 163 | m_HorizontalOverflow: 0 164 | m_VerticalOverflow: 0 165 | m_LineSpacing: 1 166 | m_Text: Filename 167 | --- !u!222 &222000010857273394 168 | CanvasRenderer: 169 | m_ObjectHideFlags: 1 170 | m_PrefabParentObject: {fileID: 0} 171 | m_PrefabInternal: {fileID: 100100000} 172 | m_GameObject: {fileID: 1000010981689570} 173 | --- !u!222 &222000012809932278 174 | CanvasRenderer: 175 | m_ObjectHideFlags: 1 176 | m_PrefabParentObject: {fileID: 0} 177 | m_PrefabInternal: {fileID: 100100000} 178 | m_GameObject: {fileID: 1000013967986654} 179 | --- !u!222 &222000013410998874 180 | CanvasRenderer: 181 | m_ObjectHideFlags: 1 182 | m_PrefabParentObject: {fileID: 0} 183 | m_PrefabInternal: {fileID: 100100000} 184 | m_GameObject: {fileID: 1000011646011302} 185 | --- !u!224 &224000012393993334 186 | RectTransform: 187 | m_ObjectHideFlags: 1 188 | m_PrefabParentObject: {fileID: 0} 189 | m_PrefabInternal: {fileID: 100100000} 190 | m_GameObject: {fileID: 1000013967986654} 191 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 192 | m_LocalPosition: {x: 0, y: 0, z: 0} 193 | m_LocalScale: {x: 1, y: 1, z: 1} 194 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 195 | m_Children: [] 196 | m_Father: {fileID: 224000013952242090} 197 | m_RootOrder: 0 198 | m_AnchorMin: {x: 0, y: 0} 199 | m_AnchorMax: {x: 0, y: 1} 200 | m_AnchoredPosition: {x: 19, y: 0} 201 | m_SizeDelta: {x: 30, y: -6} 202 | m_Pivot: {x: 0.5, y: 0.5} 203 | --- !u!224 &224000013702633820 204 | RectTransform: 205 | m_ObjectHideFlags: 1 206 | m_PrefabParentObject: {fileID: 0} 207 | m_PrefabInternal: {fileID: 100100000} 208 | m_GameObject: {fileID: 1000010981689570} 209 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 210 | m_LocalPosition: {x: 0, y: 0, z: 0} 211 | m_LocalScale: {x: 1, y: 1, z: 1} 212 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 213 | m_Children: [] 214 | m_Father: {fileID: 224000013952242090} 215 | m_RootOrder: 1 216 | m_AnchorMin: {x: 0, y: 0} 217 | m_AnchorMax: {x: 1, y: 1} 218 | m_AnchoredPosition: {x: 19, y: 0} 219 | m_SizeDelta: {x: -38, y: -4} 220 | m_Pivot: {x: 0.5, y: 0.5} 221 | --- !u!224 &224000013952242090 222 | RectTransform: 223 | m_ObjectHideFlags: 1 224 | m_PrefabParentObject: {fileID: 0} 225 | m_PrefabInternal: {fileID: 100100000} 226 | m_GameObject: {fileID: 1000011646011302} 227 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 228 | m_LocalPosition: {x: 0, y: 0, z: 0} 229 | m_LocalScale: {x: 1, y: 1, z: 1} 230 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 231 | m_Children: 232 | - {fileID: 224000012393993334} 233 | - {fileID: 224000013702633820} 234 | m_Father: {fileID: 0} 235 | m_RootOrder: 0 236 | m_AnchorMin: {x: 0, y: 1} 237 | m_AnchorMax: {x: 1, y: 1} 238 | m_AnchoredPosition: {x: 0, y: 0} 239 | m_SizeDelta: {x: 0, y: 30} 240 | m_Pivot: {x: 0, y: 1} 241 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Prefabs/SimpleFileBrowserQuickLink.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 419c1f8581236d6469bd13ae862bfb50 3 | timeCreated: 1479415743 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/README.txt: -------------------------------------------------------------------------------- 1 | = Simple File Browser = 2 | 3 | Online documentation & example code available at: https://github.com/yasirkula/UnitySimpleFileBrowser 4 | E-mail: yasirkula@gmail.com 5 | 6 | 1. ABOUT 7 | This plugin helps you show save/load dialogs during gameplay with its uGUI based file browser. 8 | 9 | 2. HOW TO 10 | for Android: set Write Permission to External (SDCard) in Player Settings 11 | 12 | The file browser can be shown either as a save dialog or a load dialog. In load mode, the returned path always leads to an existing file or folder. In save mode, the returned path can point to a non-existing file, as well. 13 | 14 | 3. SCRIPTING API 15 | Please see the online documentation for a more in-depth documentation of the Scripting API: https://github.com/yasirkula/UnitySimpleFileBrowser 16 | 17 | NOTE: On Android Q (10) or later, it is impossible to work with File APIs. On these devices, SimpleFileBrowser uses Storage Access Framework (SAF) to browse the files. However, paths returned by SAF are not File API compatible. To simulate the behaviour of the File API on all devices (including SAF), you can check out the FileBrowserHelpers functions. For reference, here is an example SAF path: content://com.android.externalstorage.documents/tree/primary%3A/document/primary%3APictures 18 | 19 | // Namespace 20 | using SimpleFileBrowser; 21 | 22 | public enum Permission { Denied = 0, Granted = 1, ShouldAsk = 2 }; 23 | 24 | public delegate void OnSuccess( string path ); 25 | public delegate void OnCancel(); 26 | 27 | // Showing dialog 28 | bool ShowSaveDialog( OnSuccess onSuccess, OnCancel onCancel, bool folderMode = false, string initialPath = null, string title = "Save", string saveButtonText = "Save" ); 29 | bool ShowLoadDialog( OnSuccess onSuccess, OnCancel onCancel, bool folderMode = false, string initialPath = null, string title = "Load", string loadButtonText = "Select" ); 30 | 31 | IEnumerator WaitForSaveDialog( bool folderMode = false, string initialPath = null, string title = "Save", string saveButtonText = "Save" ); 32 | IEnumerator WaitForLoadDialog( bool folderMode = false, string initialPath = null, string title = "Load", string loadButtonText = "Select" ); 33 | 34 | // Force closing an open dialog 35 | void HideDialog( bool invokeCancelCallback = false ); 36 | 37 | // Customizing the dialog 38 | bool AddQuickLink( string name, string path, Sprite icon = null ); 39 | void SetExcludedExtensions( params string[] excludedExtensions ); 40 | 41 | void SetFilters( bool showAllFilesFilter, IEnumerable filters ); 42 | void SetFilters( bool showAllFilesFilter, params string[] filters ); 43 | void SetFilters( bool showAllFilesFilter, IEnumerable filters ); 44 | void SetFilters( bool showAllFilesFilter, params FileBrowser.Filter[] filters ); 45 | 46 | bool SetDefaultFilter( string defaultFilter ); 47 | 48 | // Android runtime permissions 49 | FileBrowser.Permission CheckPermission(); 50 | FileBrowser.Permission RequestPermission(); 51 | 52 | // File manipulation functions that work on all platforms (including Storage Access Framework (SAF) on Android 10+) 53 | // These functions should be called with the paths returned by the FileBrowser functions only 54 | bool FileBrowserHelpers.FileExists( string path ); 55 | bool FileBrowserHelpers.DirectoryExists( string path ); 56 | bool FileBrowserHelpers.IsDirectory( string path ); 57 | FileSystemEntry[] FileBrowserHelpers.GetEntriesInDirectory( string path ); // Returns all files and folders in a directory 58 | string FileBrowserHelpers.CreateFileInDirectory( string directoryPath, string filename ); // Returns the created file's path 59 | string FileBrowserHelpers.CreateFolderInDirectory( string directoryPath, string folderName ); // Returns the created folder's path 60 | void FileBrowserHelpers.WriteBytesToFile( string targetPath, byte[] bytes ); 61 | void FileBrowserHelpers.WriteTextToFile( string targetPath, string text ); 62 | void FileBrowserHelpers.WriteCopyToFile( string targetPath, string sourceFile ); // Copies the contents of sourceFile to target file. Here, sourceFile must be a file path (i.e. don't use a SAF path as sourceFile) 63 | void FileBrowserHelpers.AppendBytesToFile( string targetPath, byte[] bytes ); 64 | void FileBrowserHelpers.AppendTextToFile( string targetPath, string text ); 65 | void FileBrowserHelpers.AppendCopyToFile( string targetPath, string sourceFile ); // Appends the contents of sourceFile to target file. Here, sourceFile must be a file path 66 | byte[] FileBrowserHelpers.ReadBytesFromFile( string sourcePath ); 67 | string FileBrowserHelpers.ReadTextFromFile( string sourcePath ); 68 | void FileBrowserHelpers.ReadCopyFromFile( string sourcePath, string destinationFile ); // Copies the contents of source to destinationFile. Here, destinationFile must be a file path 69 | string FileBrowserHelpers.RenameFile( string path, string newName ); // Returns the new path of the file 70 | string FileBrowserHelpers.RenameDirectory( string path, string newName ); // Returns the new path of the directory 71 | void FileBrowserHelpers.DeleteFile( string path ); 72 | void FileBrowserHelpers.DeleteDirectory( string path ); 73 | string FileBrowserHelpers.GetFilename( string path ); 74 | long FileBrowserHelpers.GetFilesize( string path ); 75 | DateTime FileBrowserHelpers.GetLastModifiedDate( string path ); -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/README.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02a0a0f34932297429c157aca8b9a977 3 | timeCreated: 1563308858 4 | licenseType: Free 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4cd9780a618bad4b821ad3b1a68bacd 3 | folderAsset: yes 4 | timeCreated: 1479561120 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Resources/SimpleFileBrowserCanvas.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ea2606f8fddead46aabb7adb3d8d434 3 | timeCreated: 1479415546 4 | licenseType: Free 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be37f3e38d135f94e9d78c79ef89d303 3 | folderAsset: yes 4 | timeCreated: 1479413886 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowser.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f51dc09bf9e35804ba0f5e76c527025e 3 | timeCreated: 1479416382 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserHelpers.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using UnityEngine; 3 | 4 | namespace SimpleFileBrowser 5 | { 6 | public struct FileSystemEntry 7 | { 8 | public readonly string Path; 9 | public readonly string Name; 10 | public readonly string Extension; 11 | public readonly FileAttributes Attributes; 12 | 13 | public bool IsDirectory { get { return ( Attributes & FileAttributes.Directory ) == FileAttributes.Directory; } } 14 | 15 | public FileSystemEntry( string path, string name, bool isDirectory ) 16 | { 17 | Path = path; 18 | Name = name; 19 | Extension = isDirectory ? null : System.IO.Path.GetExtension( name ); 20 | Attributes = isDirectory ? FileAttributes.Directory : FileAttributes.Normal; 21 | } 22 | 23 | public FileSystemEntry( FileSystemInfo fileInfo ) 24 | { 25 | Path = fileInfo.FullName; 26 | Name = fileInfo.Name; 27 | Extension = fileInfo.Extension; 28 | Attributes = fileInfo.Attributes; 29 | } 30 | } 31 | 32 | public static class FileBrowserHelpers 33 | { 34 | #if !UNITY_EDITOR && UNITY_ANDROID 35 | private static AndroidJavaClass m_ajc = null; 36 | public static AndroidJavaClass AJC 37 | { 38 | get 39 | { 40 | if( m_ajc == null ) 41 | m_ajc = new AndroidJavaClass( "com.yasirkula.unity.FileBrowser" ); 42 | 43 | return m_ajc; 44 | } 45 | } 46 | 47 | private static AndroidJavaObject m_context = null; 48 | public static AndroidJavaObject Context 49 | { 50 | get 51 | { 52 | if( m_context == null ) 53 | { 54 | using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) 55 | { 56 | m_context = unityClass.GetStatic( "currentActivity" ); 57 | } 58 | } 59 | 60 | return m_context; 61 | } 62 | } 63 | 64 | private static string m_temporaryFilePath = null; 65 | private static string TemporaryFilePath 66 | { 67 | get 68 | { 69 | if( m_temporaryFilePath == null ) 70 | { 71 | m_temporaryFilePath = Path.Combine( Application.temporaryCachePath, "tmpFile" ); 72 | Directory.CreateDirectory( Application.temporaryCachePath ); 73 | } 74 | 75 | return m_temporaryFilePath; 76 | } 77 | } 78 | 79 | // On Android 10+, filesystem can be accessed via Storage Access Framework only 80 | private static bool? m_shouldUseSAF = null; 81 | public static bool ShouldUseSAF 82 | { 83 | get 84 | { 85 | if( m_shouldUseSAF == null ) 86 | m_shouldUseSAF = AJC.CallStatic( "CheckSAF" ); 87 | 88 | return m_shouldUseSAF.Value; 89 | } 90 | } 91 | #endif 92 | 93 | public static bool FileExists( string path ) 94 | { 95 | #if !UNITY_EDITOR && UNITY_ANDROID 96 | if( ShouldUseSAF ) 97 | return AJC.CallStatic( "SAFEntryExists", Context, path ); 98 | #endif 99 | return File.Exists( path ); 100 | } 101 | 102 | public static bool DirectoryExists( string path ) 103 | { 104 | #if !UNITY_EDITOR && UNITY_ANDROID 105 | if( ShouldUseSAF ) 106 | return AJC.CallStatic( "SAFEntryExists", Context, path ); 107 | #endif 108 | return Directory.Exists( path ); 109 | } 110 | 111 | public static bool IsDirectory( string path ) 112 | { 113 | #if !UNITY_EDITOR && UNITY_ANDROID 114 | if( ShouldUseSAF ) 115 | return AJC.CallStatic( "SAFEntryDirectory", Context, path ); 116 | #endif 117 | if( Directory.Exists( path ) ) 118 | return true; 119 | if( File.Exists( path ) ) 120 | return false; 121 | 122 | string extension = Path.GetExtension( path ); 123 | return extension == null || extension.Length <= 1; // extension includes '.' 124 | } 125 | 126 | public static FileSystemEntry[] GetEntriesInDirectory( string path ) 127 | { 128 | #if !UNITY_EDITOR && UNITY_ANDROID 129 | if( ShouldUseSAF ) 130 | { 131 | string resultRaw = AJC.CallStatic( "OpenSAFFolder", Context, path ); 132 | int separatorIndex = resultRaw.IndexOf( "<>" ); 133 | if( separatorIndex <= 0 ) 134 | { 135 | Debug.LogError( "Entry count does not exist" ); 136 | return null; 137 | } 138 | 139 | int entryCount = 0; 140 | for( int i = 0; i < separatorIndex; i++ ) 141 | { 142 | char ch = resultRaw[i]; 143 | if( ch < '0' && ch > '9' ) 144 | { 145 | Debug.LogError( "Couldn't parse entry count" ); 146 | return null; 147 | } 148 | 149 | entryCount = entryCount * 10 + ( ch - '0' ); 150 | } 151 | 152 | if( entryCount <= 0 ) 153 | return null; 154 | 155 | FileSystemEntry[] result = new FileSystemEntry[entryCount]; 156 | for( int i = 0; i < entryCount; i++ ) 157 | { 158 | separatorIndex += 2; 159 | if( separatorIndex >= resultRaw.Length ) 160 | { 161 | Debug.LogError( "Couldn't fetch directory attribute" ); 162 | return null; 163 | } 164 | 165 | bool isDirectory = resultRaw[separatorIndex] == 'd'; 166 | 167 | separatorIndex++; 168 | int nextSeparatorIndex = resultRaw.IndexOf( "<>", separatorIndex ); 169 | if( nextSeparatorIndex <= 0 ) 170 | { 171 | Debug.LogError( "Entry name is empty" ); 172 | return null; 173 | } 174 | 175 | string entryName = resultRaw.Substring( separatorIndex, nextSeparatorIndex - separatorIndex ); 176 | 177 | separatorIndex = nextSeparatorIndex + 2; 178 | nextSeparatorIndex = resultRaw.IndexOf( "<>", separatorIndex ); 179 | if( nextSeparatorIndex <= 0 ) 180 | { 181 | Debug.LogError( "Entry rawUri is empty" ); 182 | return null; 183 | } 184 | 185 | string rawUri = resultRaw.Substring( separatorIndex, nextSeparatorIndex - separatorIndex ); 186 | 187 | separatorIndex = nextSeparatorIndex; 188 | 189 | result[i] = new FileSystemEntry( rawUri, entryName, isDirectory ); 190 | } 191 | 192 | return result; 193 | } 194 | #endif 195 | 196 | try 197 | { 198 | FileSystemInfo[] items = new DirectoryInfo( path ).GetFileSystemInfos(); 199 | FileSystemEntry[] result = new FileSystemEntry[items.Length]; 200 | for( int i = 0; i < items.Length; i++ ) 201 | result[i] = new FileSystemEntry( items[i] ); 202 | 203 | return result; 204 | } 205 | catch( System.Exception e ) 206 | { 207 | Debug.LogException( e ); 208 | return null; 209 | } 210 | } 211 | 212 | public static string CreateFileInDirectory( string directoryPath, string filename ) 213 | { 214 | #if !UNITY_EDITOR && UNITY_ANDROID 215 | if( ShouldUseSAF ) 216 | return AJC.CallStatic( "CreateSAFEntry", Context, directoryPath, false, filename ); 217 | #endif 218 | 219 | string path = Path.Combine( directoryPath, filename ); 220 | using( File.Create( path ) ) { } 221 | return path; 222 | } 223 | 224 | public static string CreateFolderInDirectory( string directoryPath, string folderName ) 225 | { 226 | #if !UNITY_EDITOR && UNITY_ANDROID 227 | if( ShouldUseSAF ) 228 | return AJC.CallStatic( "CreateSAFEntry", Context, directoryPath, true, folderName ); 229 | #endif 230 | 231 | string path = Path.Combine( directoryPath, folderName ); 232 | Directory.CreateDirectory( path ); 233 | return path; 234 | } 235 | 236 | public static void WriteBytesToFile( string targetPath, byte[] bytes ) 237 | { 238 | #if !UNITY_EDITOR && UNITY_ANDROID 239 | if( ShouldUseSAF ) 240 | { 241 | File.WriteAllBytes( TemporaryFilePath, bytes ); 242 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, TemporaryFilePath, false ); 243 | File.Delete( TemporaryFilePath ); 244 | 245 | return; 246 | } 247 | #endif 248 | File.WriteAllBytes( targetPath, bytes ); 249 | } 250 | 251 | public static void WriteTextToFile( string targetPath, string text ) 252 | { 253 | #if !UNITY_EDITOR && UNITY_ANDROID 254 | if( ShouldUseSAF ) 255 | { 256 | File.WriteAllText( TemporaryFilePath, text ); 257 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, TemporaryFilePath, false ); 258 | File.Delete( TemporaryFilePath ); 259 | 260 | return; 261 | } 262 | #endif 263 | File.WriteAllText( targetPath, text ); 264 | } 265 | 266 | public static void WriteCopyToFile( string targetPath, string sourceFile ) 267 | { 268 | #if !UNITY_EDITOR && UNITY_ANDROID 269 | if( ShouldUseSAF ) 270 | { 271 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, sourceFile, false ); 272 | return; 273 | } 274 | #endif 275 | File.Copy( sourceFile, targetPath, true ); 276 | } 277 | 278 | public static void AppendBytesToFile( string targetPath, byte[] bytes ) 279 | { 280 | #if !UNITY_EDITOR && UNITY_ANDROID 281 | if( ShouldUseSAF ) 282 | { 283 | File.WriteAllBytes( TemporaryFilePath, bytes ); 284 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, TemporaryFilePath, true ); 285 | File.Delete( TemporaryFilePath ); 286 | 287 | return; 288 | } 289 | #endif 290 | using( var stream = new FileStream( targetPath, FileMode.Append, FileAccess.Write ) ) 291 | { 292 | stream.Write( bytes, 0, bytes.Length ); 293 | } 294 | } 295 | 296 | public static void AppendTextToFile( string targetPath, string text ) 297 | { 298 | #if !UNITY_EDITOR && UNITY_ANDROID 299 | if( ShouldUseSAF ) 300 | { 301 | File.WriteAllText( TemporaryFilePath, text ); 302 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, TemporaryFilePath, true ); 303 | File.Delete( TemporaryFilePath ); 304 | 305 | return; 306 | } 307 | #endif 308 | File.AppendAllText( targetPath, text ); 309 | } 310 | 311 | public static void AppendCopyToFile( string targetPath, string sourceFile ) 312 | { 313 | #if !UNITY_EDITOR && UNITY_ANDROID 314 | if( ShouldUseSAF ) 315 | { 316 | AJC.CallStatic( "WriteToSAFEntry", Context, targetPath, sourceFile, true ); 317 | return; 318 | } 319 | #endif 320 | using( Stream input = File.OpenRead( sourceFile ) ) 321 | using( Stream output = new FileStream( targetPath, FileMode.Append, FileAccess.Write ) ) 322 | { 323 | byte[] buffer = new byte[4096]; 324 | int bytesRead; 325 | while( ( bytesRead = input.Read( buffer, 0, buffer.Length ) ) > 0 ) 326 | output.Write( buffer, 0, bytesRead ); 327 | } 328 | } 329 | 330 | public static byte[] ReadBytesFromFile( string sourcePath ) 331 | { 332 | #if !UNITY_EDITOR && UNITY_ANDROID 333 | if( ShouldUseSAF ) 334 | { 335 | AJC.CallStatic( "ReadFromSAFEntry", Context, sourcePath, TemporaryFilePath ); 336 | byte[] result = File.ReadAllBytes( TemporaryFilePath ); 337 | File.Delete( TemporaryFilePath ); 338 | return result; 339 | } 340 | #endif 341 | return File.ReadAllBytes( sourcePath ); 342 | } 343 | 344 | public static string ReadTextFromFile( string sourcePath ) 345 | { 346 | #if !UNITY_EDITOR && UNITY_ANDROID 347 | if( ShouldUseSAF ) 348 | { 349 | AJC.CallStatic( "ReadFromSAFEntry", Context, sourcePath, TemporaryFilePath ); 350 | string result = File.ReadAllText( TemporaryFilePath ); 351 | File.Delete( TemporaryFilePath ); 352 | return result; 353 | } 354 | #endif 355 | return File.ReadAllText( sourcePath ); 356 | } 357 | 358 | public static void ReadCopyFromFile( string sourcePath, string destinationFile ) 359 | { 360 | #if !UNITY_EDITOR && UNITY_ANDROID 361 | if( ShouldUseSAF ) 362 | { 363 | AJC.CallStatic( "ReadFromSAFEntry", Context, sourcePath, destinationFile ); 364 | return; 365 | } 366 | #endif 367 | File.Copy( sourcePath, destinationFile, true ); 368 | } 369 | 370 | public static string RenameFile( string path, string newName ) 371 | { 372 | #if !UNITY_EDITOR && UNITY_ANDROID 373 | if( ShouldUseSAF ) 374 | return AJC.CallStatic( "RenameSAFEntry", Context, path, newName ); 375 | #endif 376 | string newPath = Path.Combine( Path.GetDirectoryName( path ), newName ); 377 | File.Move( path, newPath ); 378 | 379 | return newPath; 380 | } 381 | 382 | public static string RenameDirectory( string path, string newName ) 383 | { 384 | #if !UNITY_EDITOR && UNITY_ANDROID 385 | if( ShouldUseSAF ) 386 | return AJC.CallStatic( "RenameSAFEntry", Context, path, newName ); 387 | #endif 388 | string newPath = Path.Combine( new DirectoryInfo( path ).Parent.FullName, newName ); 389 | Directory.Move( path, newPath ); 390 | 391 | return newPath; 392 | } 393 | 394 | public static void DeleteFile( string path ) 395 | { 396 | #if !UNITY_EDITOR && UNITY_ANDROID 397 | if( ShouldUseSAF ) 398 | { 399 | AJC.CallStatic( "DeleteSAFEntry", Context, path ); 400 | return; 401 | } 402 | #endif 403 | File.Delete( path ); 404 | } 405 | 406 | public static void DeleteDirectory( string path ) 407 | { 408 | #if !UNITY_EDITOR && UNITY_ANDROID 409 | if( ShouldUseSAF ) 410 | { 411 | AJC.CallStatic( "DeleteSAFEntry", Context, path ); 412 | return; 413 | } 414 | #endif 415 | Directory.Delete( path, true ); 416 | } 417 | 418 | public static string GetFilename( string path ) 419 | { 420 | #if !UNITY_EDITOR && UNITY_ANDROID 421 | if( ShouldUseSAF ) 422 | return AJC.CallStatic( "SAFEntryName", Context, path ); 423 | #endif 424 | return Path.GetFileName( path ); 425 | } 426 | 427 | public static long GetFilesize( string path ) 428 | { 429 | #if !UNITY_EDITOR && UNITY_ANDROID 430 | if( ShouldUseSAF ) 431 | return AJC.CallStatic( "SAFEntrySize", Context, path ); 432 | #endif 433 | return new FileInfo( path ).Length; 434 | } 435 | 436 | public static System.DateTime GetLastModifiedDate( string path ) 437 | { 438 | #if !UNITY_EDITOR && UNITY_ANDROID 439 | // Credit: https://stackoverflow.com/a/28504416/2373034 440 | if( ShouldUseSAF ) 441 | return new System.DateTime( 1970, 1, 1, 0, 0, 0 ).AddMilliseconds( AJC.CallStatic( "SAFEntryLastModified", Context, path ) ); 442 | #endif 443 | return new FileInfo( path ).LastWriteTime; 444 | } 445 | } 446 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserHelpers.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2370e7a82ec4087499ebf7efa149e9eb 3 | timeCreated: 1570919647 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserItem.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.EventSystems; 4 | 5 | namespace SimpleFileBrowser 6 | { 7 | public class FileBrowserItem : ListItem, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler 8 | { 9 | #region Constants 10 | private const float DOUBLE_CLICK_TIME = 0.5f; 11 | #endregion 12 | 13 | #region Variables 14 | protected FileBrowser fileBrowser; 15 | 16 | #pragma warning disable 0649 17 | [SerializeField] 18 | private Image background; 19 | 20 | [SerializeField] 21 | private Image icon; 22 | 23 | [SerializeField] 24 | private Text nameText; 25 | #pragma warning restore 0649 26 | 27 | private float prevTouchTime = Mathf.NegativeInfinity; 28 | #endregion 29 | 30 | #region Properties 31 | private RectTransform m_transform; 32 | public RectTransform TransformComponent 33 | { 34 | get 35 | { 36 | if( m_transform == null ) 37 | m_transform = (RectTransform) transform; 38 | 39 | return m_transform; 40 | } 41 | } 42 | 43 | public string Name { get { return nameText.text; } } 44 | public bool IsDirectory { get; private set; } 45 | #endregion 46 | 47 | #region Initialization Functions 48 | public void SetFileBrowser( FileBrowser fileBrowser ) 49 | { 50 | this.fileBrowser = fileBrowser; 51 | } 52 | 53 | public void SetFile( Sprite icon, string name, bool isDirectory ) 54 | { 55 | this.icon.sprite = icon; 56 | nameText.text = name; 57 | 58 | IsDirectory = isDirectory; 59 | } 60 | #endregion 61 | 62 | #region Pointer Events 63 | public void OnPointerClick( PointerEventData eventData ) 64 | { 65 | if( FileBrowser.SingleClickMode ) 66 | { 67 | fileBrowser.OnItemSelected( this ); 68 | fileBrowser.OnItemOpened( this ); 69 | } 70 | else 71 | { 72 | if( Time.realtimeSinceStartup - prevTouchTime < DOUBLE_CLICK_TIME ) 73 | { 74 | if( fileBrowser.SelectedFilePosition == Position ) 75 | fileBrowser.OnItemOpened( this ); 76 | 77 | prevTouchTime = Mathf.NegativeInfinity; 78 | } 79 | else 80 | { 81 | fileBrowser.OnItemSelected( this ); 82 | prevTouchTime = Time.realtimeSinceStartup; 83 | } 84 | } 85 | } 86 | 87 | public void OnPointerEnter( PointerEventData eventData ) 88 | { 89 | #if UNITY_EDITOR || ( !UNITY_ANDROID && !UNITY_IOS ) 90 | if( fileBrowser.SelectedFilePosition != Position ) 91 | background.color = fileBrowser.hoveredFileColor; 92 | #endif 93 | } 94 | 95 | public void OnPointerExit( PointerEventData eventData ) 96 | { 97 | #if UNITY_EDITOR || ( !UNITY_ANDROID && !UNITY_IOS ) 98 | if( fileBrowser.SelectedFilePosition != Position ) 99 | background.color = fileBrowser.normalFileColor; 100 | #endif 101 | } 102 | #endregion 103 | 104 | #region Other Events 105 | public void Select() 106 | { 107 | background.color = fileBrowser.selectedFileColor; 108 | } 109 | 110 | public void Deselect() 111 | { 112 | background.color = fileBrowser.normalFileColor; 113 | } 114 | 115 | public void SetHidden( bool isHidden ) 116 | { 117 | Color c = icon.color; 118 | c.a = isHidden ? 0.5f : 1f; 119 | icon.color = c; 120 | 121 | c = nameText.color; 122 | c.a = isHidden ? 0.55f : 1f; 123 | nameText.color = c; 124 | } 125 | #endregion 126 | } 127 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserItem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5f1b2825c50f7b4d9be146ab2137bff 3 | timeCreated: 1479417850 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserMovement.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.EventSystems; 3 | 4 | namespace SimpleFileBrowser 5 | { 6 | public class FileBrowserMovement : MonoBehaviour 7 | { 8 | #region Variables 9 | #pragma warning disable 0649 10 | private FileBrowser fileBrowser; 11 | private RectTransform canvasTR; 12 | private Camera canvasCam; 13 | 14 | [SerializeField] 15 | private RectTransform window; 16 | 17 | [SerializeField] 18 | private RecycledListView listView; 19 | #pragma warning restore 0649 20 | 21 | private Vector2 initialTouchPos = Vector2.zero; 22 | private Vector2 initialAnchoredPos, initialSizeDelta; 23 | #endregion 24 | 25 | #region Initialization Functions 26 | public void Initialize( FileBrowser fileBrowser ) 27 | { 28 | this.fileBrowser = fileBrowser; 29 | canvasTR = fileBrowser.GetComponent(); 30 | } 31 | #endregion 32 | 33 | #region Pointer Events 34 | public void OnDragStarted( BaseEventData data ) 35 | { 36 | PointerEventData pointer = (PointerEventData) data; 37 | 38 | canvasCam = pointer.pressEventCamera; 39 | RectTransformUtility.ScreenPointToLocalPointInRectangle( window, pointer.pressPosition, canvasCam, out initialTouchPos ); 40 | } 41 | 42 | public void OnDrag( BaseEventData data ) 43 | { 44 | PointerEventData pointer = (PointerEventData) data; 45 | 46 | Vector2 touchPos; 47 | RectTransformUtility.ScreenPointToLocalPointInRectangle( window, pointer.position, canvasCam, out touchPos ); 48 | window.anchoredPosition += touchPos - initialTouchPos; 49 | } 50 | 51 | public void OnEndDrag( BaseEventData data ) 52 | { 53 | fileBrowser.EnsureWindowIsWithinBounds(); 54 | } 55 | 56 | public void OnResizeStarted( BaseEventData data ) 57 | { 58 | PointerEventData pointer = (PointerEventData) data; 59 | 60 | canvasCam = pointer.pressEventCamera; 61 | initialAnchoredPos = window.anchoredPosition; 62 | initialSizeDelta = window.sizeDelta; 63 | RectTransformUtility.ScreenPointToLocalPointInRectangle( canvasTR, pointer.pressPosition, canvasCam, out initialTouchPos ); 64 | } 65 | 66 | public void OnResize( BaseEventData data ) 67 | { 68 | PointerEventData pointer = (PointerEventData) data; 69 | 70 | Vector2 touchPos; 71 | RectTransformUtility.ScreenPointToLocalPointInRectangle( canvasTR, pointer.position, canvasCam, out touchPos ); 72 | 73 | Vector2 delta = touchPos - initialTouchPos; 74 | Vector2 newSize = initialSizeDelta + new Vector2( delta.x, -delta.y ); 75 | 76 | if( newSize.x < fileBrowser.minWidth ) newSize.x = fileBrowser.minWidth; 77 | if( newSize.y < fileBrowser.minHeight ) newSize.y = fileBrowser.minHeight; 78 | 79 | newSize.x = (int) newSize.x; 80 | newSize.y = (int) newSize.y; 81 | 82 | delta = newSize - initialSizeDelta; 83 | 84 | window.anchoredPosition = initialAnchoredPos + new Vector2( delta.x * 0.5f, delta.y * -0.5f ); 85 | window.sizeDelta = newSize; 86 | 87 | listView.OnViewportDimensionsChanged(); 88 | } 89 | 90 | public void OnEndResize( BaseEventData data ) 91 | { 92 | fileBrowser.EnsureWindowIsWithinBounds(); 93 | } 94 | #endregion 95 | } 96 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserMovement.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 46d41d79fe7c3d44ca846b4f3d81a476 3 | timeCreated: 1479486534 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserQuickLink.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.EventSystems; 3 | 4 | namespace SimpleFileBrowser 5 | { 6 | public class FileBrowserQuickLink : FileBrowserItem, IPointerClickHandler 7 | { 8 | #region Properties 9 | private string m_targetPath; 10 | public string TargetPath { get { return m_targetPath; } } 11 | #endregion 12 | 13 | #region Initialization Functions 14 | public void SetQuickLink( Sprite icon, string name, string targetPath ) 15 | { 16 | SetFile( icon, name, true ); 17 | 18 | m_targetPath = targetPath; 19 | } 20 | #endregion 21 | 22 | #region Pointer Events 23 | public new void OnPointerClick( PointerEventData eventData ) 24 | { 25 | fileBrowser.OnQuickLinkSelected( this ); 26 | } 27 | #endregion 28 | 29 | #region Other Events 30 | #endregion 31 | } 32 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/FileBrowserQuickLink.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1f277f5418eabf94cad94208055878af 3 | timeCreated: 1479417850 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dec11495f4b8cef49b7a3b4b06f094c3 3 | folderAsset: yes 4 | timeCreated: 1485706514 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/IListViewAdapter.cs: -------------------------------------------------------------------------------- 1 | namespace SimpleFileBrowser 2 | { 3 | public delegate void OnItemClickedHandler( ListItem item ); 4 | 5 | public interface IListViewAdapter 6 | { 7 | OnItemClickedHandler OnItemClicked { get; set; } 8 | 9 | int Count { get; } 10 | float ItemHeight { get; } 11 | 12 | ListItem CreateItem(); 13 | 14 | void SetItemContent( ListItem item ); 15 | } 16 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/IListViewAdapter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 08e51b912648ace4784ebe20fc6cc961 3 | timeCreated: 1485706575 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/ListItem.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace SimpleFileBrowser 4 | { 5 | [RequireComponent( typeof( RectTransform ) )] 6 | public class ListItem : MonoBehaviour 7 | { 8 | public object Tag { get; set; } 9 | public int Position { get; set; } 10 | 11 | private IListViewAdapter adapter; 12 | 13 | internal void SetAdapter( IListViewAdapter listView ) 14 | { 15 | this.adapter = listView; 16 | } 17 | 18 | public void OnClick() 19 | { 20 | if( adapter.OnItemClicked != null ) 21 | adapter.OnItemClicked( this ); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/ListItem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9c3e7249b2cb96446a7ccfbed51aab81 3 | timeCreated: 1485706535 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/RecycledListView.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | namespace SimpleFileBrowser 6 | { 7 | [RequireComponent( typeof( ScrollRect ) )] 8 | public class RecycledListView : MonoBehaviour 9 | { 10 | // Cached components 11 | public RectTransform viewportTransform; 12 | public RectTransform contentTransform; 13 | 14 | private float itemHeight, _1OverItemHeight; 15 | private float viewportHeight; 16 | 17 | private readonly Dictionary items = new Dictionary(); 18 | private readonly Stack pooledItems = new Stack(); 19 | 20 | IListViewAdapter adapter = null; 21 | 22 | // Current indices of items shown on screen 23 | private int currentTopIndex = -1, currentBottomIndex = -1; 24 | 25 | void Start() 26 | { 27 | viewportHeight = viewportTransform.rect.height; 28 | GetComponent().onValueChanged.AddListener( ( pos ) => UpdateItemsInTheList() ); 29 | } 30 | 31 | public void SetAdapter( IListViewAdapter adapter ) 32 | { 33 | this.adapter = adapter; 34 | 35 | itemHeight = adapter.ItemHeight; 36 | _1OverItemHeight = 1f / itemHeight; 37 | } 38 | 39 | // Update the list 40 | public void UpdateList() 41 | { 42 | float newHeight = Mathf.Max( 1f, adapter.Count * itemHeight ); 43 | contentTransform.sizeDelta = new Vector2( 0f, newHeight ); 44 | viewportHeight = viewportTransform.rect.height; 45 | 46 | UpdateItemsInTheList( true ); 47 | } 48 | 49 | // Window is resized, update the list 50 | public void OnViewportDimensionsChanged() 51 | { 52 | viewportHeight = viewportTransform.rect.height; 53 | UpdateItemsInTheList(); 54 | } 55 | 56 | // Calculate the indices of items to show 57 | private void UpdateItemsInTheList( bool updateAllVisibleItems = false ) 58 | { 59 | // If there is at least one item to show 60 | if( adapter.Count > 0 ) 61 | { 62 | float contentPos = contentTransform.anchoredPosition.y - 1f; 63 | 64 | int newTopIndex = (int) ( contentPos * _1OverItemHeight ); 65 | int newBottomIndex = (int) ( ( contentPos + viewportHeight + 2f ) * _1OverItemHeight ); 66 | 67 | if( newTopIndex < 0 ) 68 | newTopIndex = 0; 69 | 70 | if( newBottomIndex > adapter.Count - 1 ) 71 | newBottomIndex = adapter.Count - 1; 72 | 73 | if( currentTopIndex == -1 ) 74 | { 75 | // There are no active items 76 | 77 | updateAllVisibleItems = true; 78 | 79 | currentTopIndex = newTopIndex; 80 | currentBottomIndex = newBottomIndex; 81 | 82 | CreateItemsBetweenIndices( newTopIndex, newBottomIndex ); 83 | } 84 | else 85 | { 86 | // There are some active items 87 | 88 | if( newBottomIndex < currentTopIndex || newTopIndex > currentBottomIndex ) 89 | { 90 | // If user scrolled a lot such that, none of the items are now within 91 | // the bounds of the scroll view, pool all the previous items and create 92 | // new items for the new list of visible entries 93 | updateAllVisibleItems = true; 94 | 95 | DestroyItemsBetweenIndices( currentTopIndex, currentBottomIndex ); 96 | CreateItemsBetweenIndices( newTopIndex, newBottomIndex ); 97 | } 98 | else 99 | { 100 | // User did not scroll a lot such that, some items are are still within 101 | // the bounds of the scroll view. Don't destroy them but update their content, 102 | // if necessary 103 | if( newTopIndex > currentTopIndex ) 104 | { 105 | DestroyItemsBetweenIndices( currentTopIndex, newTopIndex - 1 ); 106 | } 107 | 108 | if( newBottomIndex < currentBottomIndex ) 109 | { 110 | DestroyItemsBetweenIndices( newBottomIndex + 1, currentBottomIndex ); 111 | } 112 | 113 | if( newTopIndex < currentTopIndex ) 114 | { 115 | CreateItemsBetweenIndices( newTopIndex, currentTopIndex - 1 ); 116 | 117 | // If it is not necessary to update all the items, 118 | // then just update the newly created items. Otherwise, 119 | // wait for the major update 120 | if( !updateAllVisibleItems ) 121 | { 122 | UpdateItemContentsBetweenIndices( newTopIndex, currentTopIndex - 1 ); 123 | } 124 | } 125 | 126 | if( newBottomIndex > currentBottomIndex ) 127 | { 128 | CreateItemsBetweenIndices( currentBottomIndex + 1, newBottomIndex ); 129 | 130 | // If it is not necessary to update all the items, 131 | // then just update the newly created items. Otherwise, 132 | // wait for the major update 133 | if( !updateAllVisibleItems ) 134 | { 135 | UpdateItemContentsBetweenIndices( currentBottomIndex + 1, newBottomIndex ); 136 | } 137 | } 138 | } 139 | 140 | currentTopIndex = newTopIndex; 141 | currentBottomIndex = newBottomIndex; 142 | } 143 | 144 | if( updateAllVisibleItems ) 145 | { 146 | // Update all the items 147 | UpdateItemContentsBetweenIndices( currentTopIndex, currentBottomIndex ); 148 | } 149 | } 150 | else if( currentTopIndex != -1 ) 151 | { 152 | // There is nothing to show but some items are still visible; pool them 153 | DestroyItemsBetweenIndices( currentTopIndex, currentBottomIndex ); 154 | 155 | currentTopIndex = -1; 156 | } 157 | } 158 | 159 | private void CreateItemsBetweenIndices( int topIndex, int bottomIndex ) 160 | { 161 | for( int i = topIndex; i <= bottomIndex; i++ ) 162 | { 163 | CreateItemAtIndex( i ); 164 | } 165 | } 166 | 167 | // Create (or unpool) an item 168 | private void CreateItemAtIndex( int index ) 169 | { 170 | ListItem item; 171 | if( pooledItems.Count > 0 ) 172 | { 173 | item = pooledItems.Pop(); 174 | item.gameObject.SetActive( true ); 175 | } 176 | else 177 | { 178 | item = adapter.CreateItem(); 179 | item.transform.SetParent( contentTransform, false ); 180 | item.SetAdapter( adapter ); 181 | } 182 | 183 | // Reposition the item 184 | ( (RectTransform) item.transform ).anchoredPosition = new Vector2( 1f, -index * itemHeight ); 185 | 186 | // To access this item easily in the future, add it to the dictionary 187 | items[index] = item; 188 | } 189 | 190 | private void DestroyItemsBetweenIndices( int topIndex, int bottomIndex ) 191 | { 192 | for( int i = topIndex; i <= bottomIndex; i++ ) 193 | { 194 | ListItem item = items[i]; 195 | 196 | item.gameObject.SetActive( false ); 197 | pooledItems.Push( item ); 198 | } 199 | } 200 | 201 | private void UpdateItemContentsBetweenIndices( int topIndex, int bottomIndex ) 202 | { 203 | for( int i = topIndex; i <= bottomIndex; i++ ) 204 | { 205 | ListItem item = items[i]; 206 | 207 | item.Position = i; 208 | adapter.SetItemContent( item ); 209 | } 210 | } 211 | } 212 | } -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Scripts/SimpleRecycledListView/RecycledListView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87ad67b4806678e40a492e337338760b 3 | timeCreated: 1485620000 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 651607359bdd10946a8eafc45e7d1445 3 | folderAsset: yes 4 | timeCreated: 1479476379 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/Checkmark.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/Checkmark.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/Checkmark.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4924b77159e651e4aaa9a22286725d94 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DefaultFileIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/DefaultFileIcon.png -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DefaultFileIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 372a6728b63455845bdad04ffc8a323b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DriveIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/DriveIcon.png -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DriveIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c3f6bb04213791646b2e4824be1436dc 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DropdownArrow.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/DropdownArrow.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/DropdownArrow.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f73f38102c749484bbd884d4d8d87440 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/FolderIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/FolderIcon.png -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/FolderIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 05e18bb0a86cfdb4dbf887d382b69249 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/ForwardArrow.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/ForwardArrow.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/ForwardArrow.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 130f660889a70c947bff4c8ba8a2c73e 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/ImageFileIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/ImageFileIcon.png -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/ImageFileIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d95a00b6cdb17884682cd580102f14e0 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserDrag.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserDrag.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserDrag.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 285f1e681b119ce48ae469448241360b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground1.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground1.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground1.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f668f62689b67d242ad33ff665594344 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 5, y: 5, z: 5, w: 5} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground2.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground2.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground2.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6ff773ea42aedd04c8bb96a1fe9a73b8 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 5, y: 5, z: 5, w: 5} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground3.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground3.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground3.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b9c5fedc997f125448c4d8be2fc43bcd 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 5, y: 5, z: 5, w: 5} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground4.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground4.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground4.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 90bee1ddeeef38a4f860f96b5510c136 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 5, y: 5, z: 5, w: 5} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground5.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground5.psd -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/SimpleFileBrowserSlicedBackground5.psd.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2c46fa192de46b04e8281f225bee0230 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 5, y: 5, z: 5, w: 6} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 1 88 | pSDShowRemoveMatteOption: 1 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/TextFileIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eastskykang/UnityMeshImportExample/c2135c11f1f91f00fdb6103b717c127c43c45571/Assets/Plugins/SimpleFileBrowser/Sprites/TextFileIcon.png -------------------------------------------------------------------------------- /Assets/Plugins/SimpleFileBrowser/Sprites/TextFileIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d9b30118e14d81742a606dac7cc44d7e 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 5 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: 1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: SimpleFileBrowserUI 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50603abd0937f184f8cf00ff3455353e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/MeshLoader.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 866e42a7f5d1a7e69a22a27be9401a9a 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8723f38ebec1643818f51746dce82be4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/CameraController.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) 2019 Dongho Kang 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | using UnityEngine; 26 | using UnityEngine.EventSystems; 27 | 28 | namespace UnityMeshImportExample 29 | { 30 | public class CameraController : MonoBehaviour 31 | { 32 | // camera pose control 33 | [SerializeField] 34 | private float speed = 0.1f; 35 | [SerializeField] 36 | private float sensitivity = 0.5f; 37 | 38 | private Camera cam; 39 | private Vector3 _anchorPoint; 40 | private Quaternion _anchorRot; 41 | 42 | void Update() 43 | { 44 | // move by keyboard 45 | Vector3 move = Vector3.zero; 46 | if (Input.GetKey(KeyCode.W)) 47 | move += Vector3.forward * speed; 48 | if (Input.GetKey(KeyCode.S)) 49 | move -= Vector3.forward * speed; 50 | if (Input.GetKey(KeyCode.D)) 51 | move += Vector3.right * speed; 52 | if (Input.GetKey(KeyCode.A)) 53 | move -= Vector3.right * speed; 54 | if (Input.GetKey(KeyCode.E)) 55 | move += Vector3.up * speed; 56 | if (Input.GetKey(KeyCode.Q)) 57 | move -= Vector3.up * speed; 58 | transform.Translate(move); 59 | 60 | if (!EventSystem.current.IsPointerOverGameObject ()) 61 | { 62 | // only do this if mouse pointer is not on the GUI 63 | 64 | // change camera orientation by right drag 65 | if (Input.GetMouseButtonDown(1)) 66 | { 67 | _anchorPoint = new Vector3(Input.mousePosition.y, -Input.mousePosition.x); 68 | _anchorRot = transform.rotation; 69 | } 70 | 71 | if (Input.GetMouseButton(1)) 72 | { 73 | Quaternion rot = _anchorRot; 74 | Vector3 dif = _anchorPoint - new Vector3(Input.mousePosition.y, -Input.mousePosition.x); 75 | rot.eulerAngles += dif * sensitivity; 76 | transform.rotation = rot; 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Assets/Scripts/CameraController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e87c66eac8d70a9faa49c429997288c6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/SceneController.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) 2019 Dongho Kang 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | using System; 26 | using UnityEngine; 27 | using UnityEngine.UI; 28 | using UnityMeshImporter; 29 | 30 | namespace UnityMeshImportExample 31 | { 32 | public class SceneController : MonoBehaviour 33 | { 34 | private GameObject _root; 35 | 36 | private float _meshScale = 0.001f; 37 | 38 | // UI 39 | private GameObject _loadCanvas; 40 | private GameObject _errorCanvas; 41 | private GameObject _errorText; 42 | private GameObject _scaleInputField; 43 | private GameObject _scaleSlider; 44 | 45 | public SceneController() 46 | { 47 | } 48 | 49 | void Awake() 50 | { 51 | // Root object 52 | _root = GameObject.Find("Root"); 53 | 54 | // UI 55 | _loadCanvas = GameObject.Find("LoadCanvas"); 56 | _errorCanvas = GameObject.Find("ErrorCanvas"); 57 | _errorText = GameObject.Find("ErrorText"); 58 | _scaleInputField = GameObject.Find("ScaleInputField"); 59 | _scaleSlider = GameObject.Find("ScaleSlider"); 60 | _scaleSlider.GetComponent().onValueChanged.AddListener((value) => { _meshScale = value; }); 61 | 62 | var loadButton = GameObject.Find("LoadButton").GetComponent