├── .gitignore ├── .npmignore ├── 3rdParty.meta ├── 3rdParty ├── SerializableDictionary.meta └── SerializableDictionary │ ├── Editor.meta │ ├── Editor │ ├── Beetlecircus.SerializableDictionary.Editor.asmdef │ ├── Beetlecircus.SerializableDictionary.Editor.asmdef.meta │ ├── CatalogDrawer.cs │ ├── CatalogDrawer.cs.meta │ ├── CatalogGUI.cs │ ├── CatalogGUI.cs.meta │ ├── EditorWithCatalogs.cs │ ├── EditorWithCatalogs.cs.meta │ ├── SerializedPropertyExtension.cs │ ├── SerializedPropertyExtension.cs.meta │ ├── SerializedPropertyHelper.cs │ └── SerializedPropertyHelper.cs.meta │ ├── LICENSE.md │ ├── LICENSE.md.meta │ ├── Runtime.meta │ ├── Runtime │ ├── AutomaticKeysAttribute.cs │ ├── AutomaticKeysAttribute.cs.meta │ ├── Beetlecircus.SerializableDictionary.asmdef │ ├── Beetlecircus.SerializableDictionary.asmdef.meta │ ├── Catalog.cs │ ├── Catalog.cs.meta │ ├── CatalogDataAttribute.cs │ ├── CatalogDataAttribute.cs.meta │ ├── EqualityComparerForUnity.cs │ ├── EqualityComparerForUnity.cs.meta │ ├── SerializableDictionary.cs │ ├── SerializableDictionary.cs.meta │ ├── ValueLayoutAttribute.cs │ └── ValueLayoutAttribute.cs.meta │ ├── Tests.meta │ └── Tests │ ├── Runtime.meta │ └── Runtime │ ├── Beetlecircus.SerializableDictionary.Tests.asmdef │ ├── Beetlecircus.SerializableDictionary.Tests.asmdef.meta │ ├── CatalogContainer.cs │ ├── CatalogContainer.cs.meta │ ├── TestCatalog.cs │ ├── TestCatalog.cs.meta │ ├── TestStructure.cs │ └── TestStructure.cs.meta ├── CHANGELOG.md.meta ├── Changelog.md ├── Documentation~ ├── TableOfContents.md ├── images │ ├── MultiPage_TOC-structure.png │ └── example.png ├── index.md ├── sample-package-guide.md ├── test-package-guide.md └── tools-package-guide.md ├── Editor.meta ├── Editor ├── AnimationTool.cs ├── AnimationTool.cs.meta ├── AnimationToolOverlay.cs ├── AnimationToolOverlay.cs.meta ├── AnimatorSelectionWindow.cs ├── AnimatorSelectionWindow.cs.meta ├── AssetBrowser.cs ├── AssetBrowser.cs.meta ├── AssetManageHelpers.cs ├── AssetManageHelpers.cs.meta ├── ColliderNameRules.cs ├── ColliderNameRules.cs.meta ├── CreateLightGroupWindow.cs ├── CreateLightGroupWindow.cs.meta ├── CreateLightPresetWindow.cs ├── CreateLightPresetWindow.cs.meta ├── CreateNewFilterWindow.cs ├── CreateNewFilterWindow.cs.meta ├── DragDropModelPostProcessor.cs ├── DragDropModelPostProcessor.cs.meta ├── EmptyPane.cs ├── EmptyPane.cs.meta ├── External.meta ├── External │ ├── SymlinkUtility.cs │ └── SymlinkUtility.cs.meta ├── FbxTool.cs ├── FbxTool.cs.meta ├── FeedbackWindow.cs ├── FeedbackWindow.cs.meta ├── HierarchyChangeListener.cs ├── HierarchyChangeListener.cs.meta ├── Layouts.meta ├── Layouts │ ├── Default.wlt │ └── Default.wlt.meta ├── LightingPresetSceneChanger.cs ├── LightingPresetSceneChanger.cs.meta ├── LoadMeshWindow.cs ├── LoadMeshWindow.cs.meta ├── LookDevHelpers.cs ├── LookDevHelpers.cs.meta ├── LookDevNameRules.cs ├── LookDevNameRules.cs.meta ├── LookDevPreferences.cs ├── LookDevPreferences.cs.meta ├── LookDevSceneMenu.cs ├── LookDevSceneMenu.cs.meta ├── LookDevSearchFilters.cs ├── LookDevSearchFilters.cs.meta ├── LookDevSearchHelpers.cs ├── LookDevSearchHelpers.cs.meta ├── LookDevShortcutsOverlay.cs ├── LookDevShortcutsOverlay.cs.meta ├── LookDevStudioEditor.cs ├── LookDevStudioEditor.cs.meta ├── LookDevWelcomeWindow.cs ├── LookDevWelcomeWindow.cs.meta ├── MaterialBrowserPopup.cs ├── MaterialBrowserPopup.cs.meta ├── Mode.meta ├── Mode │ ├── lookdevstudio.mode │ └── lookdevstudio.mode.meta ├── PrefabSaveAsWindow.cs ├── PrefabSaveAsWindow.cs.meta ├── ProjectSetting.cs ├── ProjectSetting.cs.meta ├── ProjectSettingEditorWindow.cs ├── ProjectSettingEditorWindow.cs.meta ├── ProjectSettingWindow.cs ├── ProjectSettingWindow.cs.meta ├── QuickControl.cs ├── QuickControl.cs.meta ├── RenameWindow.cs ├── RenameWindow.cs.meta ├── RenderSettingsBundler.cs ├── RenderSettingsBundler.cs.meta ├── Resources.meta ├── Resources │ ├── ColorSet.meta │ ├── ColorSet │ │ ├── ColorSet_Green.png │ │ └── ColorSet_Green.png.meta │ ├── GUISkin.meta │ ├── GUISkin │ │ ├── GUISkin_MaterialBrowser.guiskin │ │ └── GUISkin_MaterialBrowser.guiskin.meta │ ├── Icon_Anim.png │ ├── Icon_Anim.png.meta │ ├── Icon_AnimPause.png │ ├── Icon_AnimPause.png.meta │ ├── Icon_AnimPlay.png │ ├── Icon_AnimPlay.png.meta │ ├── Icon_AnimReset.png │ ├── Icon_AnimReset.png.meta │ ├── Icon_AnimRewind.png │ ├── Icon_AnimRewind.png.meta │ ├── Icon_AnimStop.png │ ├── Icon_AnimStop.png.meta │ ├── Icon_AssignMat.png │ ├── Icon_AssignMat.png.meta │ ├── Icon_Clip.png │ ├── Icon_Clip.png.meta │ ├── Icon_DelMat.png │ ├── Icon_DelMat.png.meta │ ├── Icon_DupMat.png │ ├── Icon_DupMat.png.meta │ ├── Icon_ExpMat.png │ ├── Icon_ExpMat.png.meta │ ├── Icon_Hdr.png │ ├── Icon_Hdr.png.meta │ ├── Icon_ImpMat.png │ ├── Icon_ImpMat.png.meta │ ├── Icon_Lgt.png │ ├── Icon_Lgt.png.meta │ ├── Icon_LgtGrp.png │ ├── Icon_LgtGrp.png.meta │ ├── Icon_Lock.png │ ├── Icon_Lock.png.meta │ ├── Icon_Mat.png │ ├── Icon_Mat.png.meta │ ├── Icon_Mod.png │ ├── Icon_Mod.png.meta │ ├── Icon_NewMat.png │ ├── Icon_NewMat.png.meta │ ├── Icon_NewMatGrp.png │ ├── Icon_NewMatGrp.png.meta │ ├── Icon_NewMatPreset.png │ ├── Icon_NewMatPreset.png.meta │ ├── Icon_Rename.png │ ├── Icon_Rename.png.meta │ ├── Icon_SelectedColor.png │ ├── Icon_SelectedColor.png.meta │ ├── Icon_Setting.png │ ├── Icon_Setting.png.meta │ ├── Icon_Sha.png │ ├── Icon_Sha.png.meta │ ├── Icon_Tex.png │ ├── Icon_Tex.png.meta │ ├── LookDev-1.jpg │ ├── LookDev-1.jpg.meta │ ├── LookdevHelp.png │ ├── LookdevHelp.png.meta │ ├── LookdevHelp_02.png │ ├── LookdevHelp_02.png.meta │ ├── LookdevHelp_ToggleHighlight.png │ └── LookdevHelp_ToggleHighlight.png.meta ├── RootEditors.meta ├── RootEditors │ ├── CameraRootEditor.cs │ └── CameraRootEditor.cs.meta ├── SearchPopup.cs ├── SearchPopup.cs.meta ├── SearchProviderForAnimation.cs ├── SearchProviderForAnimation.cs.meta ├── SearchProviderForAssociatedAssets.cs ├── SearchProviderForAssociatedAssets.cs.meta ├── SearchProviderForLight.cs ├── SearchProviderForLight.cs.meta ├── SearchProviderForMaterials.cs ├── SearchProviderForMaterials.cs.meta ├── SearchProviderForModels.cs ├── SearchProviderForModels.cs.meta ├── SearchProviderForShader.cs ├── SearchProviderForShader.cs.meta ├── SearchProviderForTextures.cs ├── SearchProviderForTextures.cs.meta ├── Sessions.meta ├── Sessions │ ├── LookDevSession.cs │ ├── LookDevSession.cs.meta │ ├── SessionDirectives.cs │ └── SessionDirectives.cs.meta ├── StandaloneFileBrowser.meta ├── StandaloneFileBrowser │ ├── IStandaloneFileBrowser.cs │ ├── IStandaloneFileBrowser.cs.meta │ ├── Plugins.meta │ ├── Plugins │ │ ├── Linux.meta │ │ ├── Linux │ │ │ ├── x86_64.meta │ │ │ └── x86_64 │ │ │ │ ├── libStandaloneFileBrowser.so │ │ │ │ └── libStandaloneFileBrowser.so.meta │ │ ├── Ookii.Dialogs.dll │ │ ├── Ookii.Dialogs.dll.meta │ │ ├── StandaloneFileBrowser.bundle.meta │ │ ├── StandaloneFileBrowser.bundle │ │ │ ├── Contents.meta │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ ├── Info.plist.meta │ │ │ │ ├── MacOS.meta │ │ │ │ └── MacOS │ │ │ │ ├── StandaloneFileBrowser │ │ │ │ └── StandaloneFileBrowser.meta │ │ ├── StandaloneFileBrowser.jslib │ │ ├── StandaloneFileBrowser.jslib.meta │ │ ├── System.Windows.Forms.dll │ │ └── System.Windows.Forms.dll.meta │ ├── StandaloneFileBrowser.cs │ ├── StandaloneFileBrowser.cs.meta │ ├── StandaloneFileBrowserEditor.cs │ ├── StandaloneFileBrowserEditor.cs.meta │ ├── StandaloneFileBrowserLinux.cs │ ├── StandaloneFileBrowserLinux.cs.meta │ ├── StandaloneFileBrowserMac.cs │ ├── StandaloneFileBrowserMac.cs.meta │ ├── StandaloneFileBrowserWindows.cs │ └── StandaloneFileBrowserWindows.cs.meta ├── SyncDCC.meta ├── SyncDCC │ ├── BlenderCommands.cs │ ├── BlenderCommands.cs.meta │ ├── BlenderScript.meta │ ├── BlenderScript │ │ ├── InitCommandPortOnBlender.py │ │ └── InitCommandPortOnBlender.py.meta │ ├── DCCLauncher.cs │ ├── DCCLauncher.cs.meta │ ├── DCCToUnity.cs │ ├── DCCToUnity.cs.meta │ ├── ICommands.cs │ ├── ICommands.cs.meta │ ├── MaxCommands.cs │ ├── MaxCommands.cs.meta │ ├── MaxScript.meta │ ├── MaxScript │ │ ├── InitCommandPortOnMax.ms │ │ └── InitCommandPortOnMax.ms.meta │ ├── MayaCommands.cs │ ├── MayaCommands.cs.meta │ ├── MayaScript.meta │ ├── MayaScript │ │ ├── ExportModel.mel │ │ ├── ExportModel.mel.meta │ │ ├── GenerateMaterialAndTexture.mel │ │ ├── GenerateMaterialAndTexture.mel.meta │ │ ├── ImportModel.mel │ │ ├── ImportModel.mel.meta │ │ ├── InitCommandPortOnMaya.mel │ │ ├── InitCommandPortOnMaya.mel.meta │ │ ├── MAYA_ColorLinkInfo.txt │ │ ├── MAYA_ColorLinkInfo.txt.meta │ │ ├── MAYA_FloatLinkInfo.txt │ │ ├── MAYA_FloatLinkInfo.txt.meta │ │ ├── MAYA_TextureLinkInfo.txt │ │ ├── MAYA_TextureLinkInfo.txt.meta │ │ ├── MAYA_VectorLinkInfo.txt │ │ ├── MAYA_VectorLinkInfo.txt.meta │ │ ├── Mapping.meta │ │ ├── Mapping │ │ │ ├── AutodeskInteractive.csv │ │ │ └── AutodeskInteractive.csv.meta │ │ ├── RemoveMaterialConnection.mel │ │ ├── RemoveMaterialConnection.mel.meta │ │ ├── RenameMaterials.mel │ │ ├── RenameMaterials.mel.meta │ │ ├── RenameModels.mel │ │ └── RenameModels.mel.meta │ ├── PhotoshopCommands.cs │ ├── PhotoshopCommands.cs.meta │ ├── SubstanceCommands.cs │ ├── SubstanceCommands.cs.meta │ ├── UnityToDCC.cs │ └── UnityToDCC.cs.meta ├── TextureLinkBrowser.cs ├── TextureLinkBrowser.cs.meta ├── TextureLinkBrowserPopup.cs ├── TextureLinkBrowserPopup.cs.meta ├── TexturePopulationRules.cs ├── TexturePopulationRules.cs.meta ├── ToolbarWindow.cs ├── ToolbarWindow.cs.meta ├── Unity.LookDevStudio.Editor.asmdef └── Unity.LookDevStudio.Editor.asmdef.meta ├── LICENSE.md ├── LICENSE.md.meta ├── LookDev_Studio_Documentation.pdf ├── LookDev_Studio_Documentation.pdf.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── AssetHolder.cs ├── AssetHolder.cs.meta ├── CameraPreset.cs ├── CameraPreset.cs.meta ├── ILightRig.cs ├── ILightRig.cs.meta ├── LookDevCamera.cs ├── LookDevCamera.cs.meta ├── LookDevConfig.cs ├── LookDevConfig.cs.meta ├── MaterialBallArray.cs ├── MaterialBallArray.cs.meta ├── RenderModeUI.cs ├── RenderModeUI.cs.meta ├── Unity.LookDevStudio.asmdef └── Unity.LookDevStudio.asmdef.meta ├── Settings.meta ├── Settings ├── TextureNameRule.meta └── TextureNameRule │ ├── LookDevNameConvention.csv │ └── LookDevNameConvention.csv.meta ├── Tests.meta ├── Tests ├── .tests.json ├── Editor.meta ├── Editor │ ├── EditorExampleTest.cs │ ├── EditorExampleTest.cs.meta │ ├── Unity.SubGroup.YourPackageName.EditorTests.asmdef │ └── Unity.SubGroup.YourPackageName.EditorTests.asmdef.meta ├── Runtime.meta └── Runtime │ ├── RuntimeExampleTest.cs │ ├── RuntimeExampleTest.cs.meta │ ├── Unity.SubGroup.YourPackageName.Tests.asmdef │ └── Unity.SubGroup.YourPackageName.Tests.asmdef.meta ├── Third Party Notices.md ├── Third Party Notices.md.meta ├── UI.meta ├── UI ├── Feedback.uxml ├── Feedback.uxml.meta ├── LookDevStudioToolbar.uss ├── LookDevStudioToolbar.uss.meta ├── LookDevStudioToolbar.uxml ├── LookDevStudioToolbar.uxml.meta ├── LookDevWelcome.uxml ├── LookDevWelcome.uxml.meta ├── PanelSettings.asset ├── PanelSettings.asset.meta ├── RenderModeUI.prefab ├── RenderModeUI.prefab.meta ├── RenderModeUIDocument.prefab ├── RenderModeUIDocument.prefab.meta ├── Resources.meta ├── Resources │ ├── Icon_Camera.png │ ├── Icon_Camera.png.meta │ ├── Icon_CameraAuto.png │ ├── Icon_CameraAuto.png.meta │ ├── Icon_CameraRender.png │ ├── Icon_CameraRender.png.meta │ ├── Icon_CameraSave.png │ ├── Icon_CameraSave.png.meta │ ├── Popup_Banner.png │ ├── Popup_Banner.png.meta │ ├── ScreenshotIcon.png │ └── ScreenshotIcon.png.meta ├── RuntimeLookDevStudioToolbar.uss ├── RuntimeLookDevStudioToolbar.uss.meta ├── UnityBaseStyle.uss ├── UnityBaseStyle.uss.meta ├── UnityDefaultRuntimeTheme.tss └── UnityDefaultRuntimeTheme.tss.meta ├── ignore.conf ├── ignore.conf.meta ├── package.json └── package.json.meta /.gitignore: -------------------------------------------------------------------------------- 1 | artifacts/** 2 | build/** 3 | .build_script/** 4 | node_modules/** 5 | .DS_Store 6 | .npmrc 7 | !Documentation~ 8 | !.Documentation 9 | npm-debug.log 10 | build.sh.meta 11 | build.bat.meta 12 | .idea/ 13 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | artifacts/** 2 | build/** 3 | .build_script/** 4 | node_modules/** 5 | Documentation/ApiDocs/** 6 | Documentation~/ApiDocs/** 7 | .DS_Store 8 | .npmrc 9 | .npmignore 10 | .gitignore 11 | CONTRIBUTING.md 12 | CONTRIBUTING.md.meta 13 | QAReport.md 14 | QAReport.md.meta 15 | .gitlab-ci.yml 16 | build.sh 17 | build.sh.meta 18 | build.bat 19 | build.bat.meta 20 | -------------------------------------------------------------------------------- /3rdParty.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1fc0f8e2a1308e6438c47885674bf430 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 894c0afdc979aec468843ec9ba733908 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0522ca427294d7e4583f2f0ab3cd20c7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/Beetlecircus.SerializableDictionary.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Beetlecircus.SerializableDictionary.Editor", 3 | "references": [ 4 | "Beetlecircus.SerializableDictionary" 5 | ], 6 | "includePlatforms": [ 7 | "Editor" 8 | ], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": true, 12 | "precompiledReferences": [], 13 | "autoReferenced": true, 14 | "defineConstraints": [], 15 | "versionDefines": [], 16 | "noEngineReferences": false 17 | } -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/Beetlecircus.SerializableDictionary.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24b250dc5c0fe9b4fa7519280f170a20 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/CatalogDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4c434862391ba349a0aa67a3df7f8a6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/CatalogGUI.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | using UnityEngine; 4 | using UnityEditor; 5 | 6 | public class CatalogGUI { 7 | protected static Dictionary drawers = new Dictionary(); 8 | protected static Dictionary labels = new Dictionary (); 9 | 10 | static public void CatalogField (Rect position, SerializedProperty property) { 11 | var code = property.GetObjectCode(); 12 | 13 | if (!labels .TryGetValue(code, out var label )) labels [code] = label = new GUIContent(property.displayName); 14 | if (!drawers.TryGetValue(code, out var drawer)) drawers[code] = drawer = new CatalogDrawer(); 15 | 16 | drawer.OnGUI (position, property, label); 17 | } 18 | } 19 | 20 | public class CatalogGUILayout : CatalogGUI { 21 | 22 | static public void CatalogField (SerializedProperty property) { 23 | var code = property.GetObjectCode(); 24 | 25 | if (!labels .TryGetValue(code, out var label )) labels [code] = label = new GUIContent(property.displayName); 26 | if (!drawers.TryGetValue(code, out var drawer)) drawers[code] = drawer = new CatalogDrawer(); 27 | 28 | var position = EditorGUILayout.GetControlRect(true, drawer.GetPropertyHeight(property, null)); 29 | drawer.OnGUI (position, property, label); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/CatalogGUI.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f19d686f32d7f9f4991f6652197ca815 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/EditorWithCatalogs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | using UnityEngine; 4 | 5 | using UnityEditor; 6 | 7 | // Warning, compared with Editor, one ui feature will be missing from the default inspector, AudioFilterGUI 8 | public class EditorWithCatalogs : Editor { 9 | 10 | private class SerializedPropertyComparer : IEqualityComparer { 11 | public bool Equals (SerializedProperty left, SerializedProperty right) => SerializedProperty.EqualContents(left, right); 12 | public int GetHashCode(SerializedProperty prop) => prop.GetObjectCode(); 13 | } 14 | 15 | private Dictionary propertyIsCatalog = new Dictionary(new SerializedPropertyComparer()); 16 | 17 | public bool CheckIfNeedsCatalog (SerializedProperty prop) { 18 | if (!propertyIsCatalog.TryGetValue(prop, out var result)) { 19 | var fieldInfo = SerializedPropertyHelper.GetFieldInfoOfProperty (prop); 20 | var isCatalog = (fieldInfo?.GetCustomAttributes(typeof(CatalogDataAttribute), true).Length ?? 0) != 0; 21 | propertyIsCatalog[prop] = result = isCatalog; 22 | } 23 | return result; 24 | } 25 | 26 | public new bool DrawDefaultInspector() { 27 | using (new LocalizationGroup(target)) { 28 | EditorGUI.BeginChangeCheck(); 29 | serializedObject.UpdateIfRequiredOrScript(); 30 | 31 | SerializedProperty iterator = serializedObject.GetIterator(); 32 | if (iterator.NextVisible(true)) do 33 | using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath)) 34 | if (CheckIfNeedsCatalog( iterator )) 35 | CatalogGUILayout.CatalogField(iterator); 36 | else 37 | EditorGUILayout.PropertyField(iterator, true); 38 | while (iterator.NextVisible(false)); 39 | 40 | serializedObject.ApplyModifiedProperties(); 41 | return EditorGUI.EndChangeCheck(); 42 | } 43 | } 44 | 45 | public override void OnInspectorGUI() { 46 | DrawDefaultInspector(); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/EditorWithCatalogs.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e7bc4e657e65554bb6706893d68f33b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/SerializedPropertyExtension.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | public static class SerializedPropertyExtension { 4 | 5 | public static int GetObjectCode(this SerializedProperty p) { // Unique code per serialized object and property path 6 | return p.propertyPath.GetHashCode() ^ p.serializedObject.GetHashCode(); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/SerializedPropertyExtension.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e1336ab7e63962a4ea38a7fd95b352a5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Editor/SerializedPropertyHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 647e5db8bddb205408939e0d39904b7c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Unity-Technologies/lookdev-studio/718563db8849e9857b4322285bfc96c8f1206f8d/3rdParty/SerializableDictionary/LICENSE.md -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0116c048f42001d41ad7056eaf299023 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3449425e785eda943a47ae4708711112 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/AutomaticKeysAttribute.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | [System.AttributeUsage(System.AttributeTargets.Field)] 4 | public class AutomaticKeysAttribute : System.Attribute { 5 | public AutomaticKeysAttribute() {} 6 | } 7 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/AutomaticKeysAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d7f59fb88f6eb874ca5b5df78d4e461d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/Beetlecircus.SerializableDictionary.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Beetlecircus.SerializableDictionary", 3 | "references": [], 4 | "includePlatforms": [], 5 | "excludePlatforms": [], 6 | "allowUnsafeCode": false, 7 | "overrideReferences": true, 8 | "precompiledReferences": [], 9 | "autoReferenced": true, 10 | "defineConstraints": [], 11 | "versionDefines": [], 12 | "noEngineReferences": false 13 | } -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/Beetlecircus.SerializableDictionary.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fd28ae612cba27a468d0e07eab11f904 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/Catalog.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9812de89e4d43974f934c3d9a9d95451 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/CatalogDataAttribute.cs: -------------------------------------------------------------------------------- 1 | public class CatalogDataAttribute : System.Attribute {} 2 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/CatalogDataAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2edde7df976c9e14ba97acaa22a7dd4e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/EqualityComparerForUnity.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | public class EqualityComparerForUnity { 4 | 5 | public static IEqualityComparer Default { get; } = CreateComparer(); 6 | 7 | private static IEqualityComparer CreateComparer() { 8 | 9 | if (typeof(UnityEngine.Object).IsAssignableFrom(typeof(T))) 10 | return (IEqualityComparer) new UnityObjectEqualityComparer(); 11 | 12 | return EqualityComparer.Default; 13 | } 14 | 15 | private class UnityObjectEqualityComparer : EqualityComparer { 16 | public override bool Equals (UnityEngine.Object left, UnityEngine.Object right) => left?.Equals(right) ?? right == null; 17 | public override int GetHashCode (UnityEngine.Object obj) => obj?.GetHashCode() ?? 0; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/EqualityComparerForUnity.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 533506cc5360d034da6842e5c413b8f3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/SerializableDictionary.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2e0f8ca5ad936a84bb9feb4d51b0ba0b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/ValueLayoutAttribute.cs: -------------------------------------------------------------------------------- 1 | [System.AttributeUsage(System.AttributeTargets.Field)] 2 | public class ValueLayoutAttribute : System.Attribute { 3 | public string keyLabel, value1Label, value2Label, value3Label, value4Label; 4 | // Widths are only for the data field, the label is auto-sized. 5 | public float keyWidth, value1Width, value2Width, value3Width, value4Width; 6 | 7 | public string GetLabel (int index) { 8 | #if UNITY_2020_2_OR_NEWER 9 | return index switch { 10 | 0 => keyLabel, 11 | 1 => value1Label, 12 | 2 => value2Label, 13 | 3 => value3Label, 14 | 4 => value4Label, 15 | _ => "" 16 | }; 17 | #else 18 | switch (index) { 19 | case 0: 20 | return keyLabel; 21 | case 1: 22 | return value1Label; 23 | case 2: 24 | return value2Label; 25 | case 3: 26 | return value3Label; 27 | case 4: 28 | return value4Label; 29 | default: 30 | return ""; 31 | } 32 | #endif 33 | } 34 | 35 | public float GetWidth (int index) { 36 | #if UNITY_2020_2_OR_NEWER 37 | return index switch { 38 | 0 => keyWidth, 39 | 1 => value1Width, 40 | 2 => value2Width, 41 | 3 => value3Width, 42 | 4 => value4Width, 43 | _ => 0f 44 | }; 45 | #else 46 | switch (index) { 47 | case 0: 48 | return keyWidth; 49 | case 1: 50 | return value1Width; 51 | case 2: 52 | return value2Width; 53 | case 3: 54 | return value3Width; 55 | case 4: 56 | return value4Width; 57 | default: 58 | return 0f; 59 | } 60 | #endif 61 | } 62 | 63 | public ValueLayoutAttribute () { 64 | keyLabel = value1Label = value2Label = value3Label = value4Label = string.Empty; 65 | keyWidth = value1Width = value2Width = value3Width = value4Width = 0f; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Runtime/ValueLayoutAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 650b2753952cfba44b5a059c5fc8ef0f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb1f73878e65aa94f9a91536504bab04 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8413c6608e3f1804891c798ffea0cd16 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/Beetlecircus.SerializableDictionary.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Beetlecircus.SerializableDictionary.Tests", 3 | "rootNamespace": "", 4 | "references": [ 5 | "Beetlecircus.SerializableDictionary", 6 | "UnityEngine.TestRunner", 7 | "UnityEditor.TestRunner" 8 | ], 9 | "includePlatforms": [ 10 | "Editor" 11 | ], 12 | "excludePlatforms": [], 13 | "allowUnsafeCode": false, 14 | "overrideReferences": true, 15 | "precompiledReferences": [ 16 | "nunit.framework.dll" 17 | ], 18 | "autoReferenced": false, 19 | "defineConstraints": [ 20 | "UNITY_INCLUDE_TESTS" 21 | ], 22 | "versionDefines": [], 23 | "noEngineReferences": false 24 | } -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/Beetlecircus.SerializableDictionary.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a36d6cc14c02c704cb744474336ca9e7 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/CatalogContainer.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace CatalogContainerTest { 4 | public class CatalogContainer : UnityEngine.ScriptableObject, UnityEngine.ISerializationCallbackReceiver { 5 | public const string nameof_source = nameof(source); 6 | 7 | [UnityEngine.SerializeField] private TestStructure[] source; 8 | public Catalog catalog; 9 | 10 | public CatalogContainer() => 11 | catalog = new Catalog( () => ref source, entry => entry.Key ); 12 | void OnEnable() => 13 | source ??= new TestStructure[0]; 14 | 15 | public void OnBeforeSerialize () => catalog.OnBeforeSerialize(); 16 | public void OnAfterDeserialize() => catalog.OnAfterDeserialize(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/CatalogContainer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15fbc1cea31455d4396e785c35a6ae8f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/TestCatalog.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e19d34999eb07f4ab138623e8be5f1e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/TestStructure.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace CatalogContainerTest { 4 | [Serializable] 5 | public struct TestStructure : IEquatable, IComparable { 6 | public int Key; 7 | public string Data; 8 | 9 | public bool Equals (TestStructure s ) => (Key == s.Key) && Data.Equals(s.Data); 10 | public override bool Equals (object obj) => obj is TestStructure && this.Equals((TestStructure)obj); 11 | public override int GetHashCode() => (Key, Data).GetHashCode(); 12 | 13 | public int CompareTo (TestStructure other) { // For sorting 14 | var r = Key.CompareTo(other.Key); 15 | return r != 0 ? r : Data.CompareTo(other.Data); 16 | } 17 | 18 | public static bool operator ==(TestStructure lhs, TestStructure rhs) => lhs.Equals(rhs); 19 | public static bool operator !=(TestStructure lhs, TestStructure rhs) => !(lhs.Equals(rhs)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /3rdParty/SerializableDictionary/Tests/Runtime/TestStructure.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b5685811fdca4149b5b3bc64d89a1e2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a749b51db749c4704bdcf573e3e8f92e 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this package will be documented in this file. 3 | 4 | ## [0.2.0] - 2021-12-01 5 | 6 | This is the second release of LookDev Studio (prototype). 7 | 8 | Key features of this release: 9 | 10 | - Separate URP version 11 | 12 | - Lighting groups and preset customization: 13 | - New lighting and HDRi tabs 14 | - Create and save custom lighting presets or light prefabs to use in LookDev Studio 15 | - Create an HDRi from a Texture through context menu 16 | 17 | - Filtering 18 | - Organize your LookDev project by setting custom filters to view only the folders or subfolders you want to work on 19 | - Right-click an Asset and select “show related Assets” 20 | 21 | - Project settings: 22 | - Automatically generate Prefabs on model import 23 | - Automatically generate colliders on model import 24 | - Set preferred DCC tools to edit in DCC 25 | - Select asset directory 26 | 27 | - Channel debugging: 28 | - Cycle quickly between debug channels using shortcuts (B & M keys) or by using a dropdown 29 | 30 | - *Early implementation: Animation preview: 31 | - Drag and drop animations into LookDev Studio. Apply them to their corresponding models or prefabs to view animations in your LookDev setup 32 | 33 | - Usability changes 34 | - Tab navigation UI 35 | - New Animation tab 36 | - New Lighting tab 37 | - New HDRi tab 38 | - New Shader tab 39 | - Top bar containing additional camera save slots 40 | - Save Prefab changes or generate new Prefab 41 | 42 | 43 | ## [0.1.0] - 2021-08-02 44 | 45 | This is the first release of LookDev Studio (prototype). 46 | 47 | Key features of this release: 48 | 49 | Import 50 | - Improved 3D asset import pipeline with focus on models, materials, textures 51 | Preview 52 | - Assigning materials and textures 53 | - Easy switching between predefined lighting presets 54 | Navigation 55 | - Scene navigation and preview of the loaded models 56 | -------------------------------------------------------------------------------- /Documentation~/TableOfContents.md: -------------------------------------------------------------------------------- 1 | * [UPM Package Starter Kit](index) 2 | * [Guide for features packages](tools-package-guide) 3 | * [Guide for sample packages](sample-package-guide) 4 | * [Guide for test packages](test-package-guide) 5 | -------------------------------------------------------------------------------- /Documentation~/images/MultiPage_TOC-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Unity-Technologies/lookdev-studio/718563db8849e9857b4322285bfc96c8f1206f8d/Documentation~/images/MultiPage_TOC-structure.png -------------------------------------------------------------------------------- /Documentation~/images/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Unity-Technologies/lookdev-studio/718563db8849e9857b4322285bfc96c8f1206f8d/Documentation~/images/example.png -------------------------------------------------------------------------------- /Documentation~/test-package-guide.md: -------------------------------------------------------------------------------- 1 | # About the <package name> tests 2 | 3 | The <package name> package provides a test suite for the <feature or package name>. 4 | 5 | 47 | 48 | ## Package contents 49 | The following table describes the package folder structure: 50 | |**Location**|**Description**| 51 | |---|---| 52 | |*MyFolderName*|Contains <describe what the folder contains>.| 53 | |*MyFolderName/MyFileName*|Contains <describe what the file represents or implements>.| 54 | # Running the tests 55 | 56 | To use the <test-name>, make sure you have ... 57 | -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 65e5413931d8e4116af409f175ad012c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/AnimationTool.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 241638ffedac3594bb8bb4710801cb66 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AnimationToolOverlay.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6af04565e387ad34dbc30b617607d738 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AnimatorSelectionWindow.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | 6 | namespace LookDev.Editor 7 | { 8 | public class AnimatorSelectionWindow : EditorWindow 9 | { 10 | public List animators = new List(); 11 | 12 | Vector2 scrollPos; 13 | Animator selectedAnimator = null; 14 | 15 | private void OnGUI() 16 | { 17 | GUILayout.BeginScrollView(scrollPos); 18 | 19 | GUILayout.BeginVertical(); 20 | 21 | for (int i=0;i< animators.Count;i++) 22 | { 23 | if (GUILayout.Button($"{animators[i].name}")) 24 | { 25 | selectedAnimator = animators[i]; 26 | this.Close(); 27 | } 28 | if (Event.current.type == EventType.Repaint && GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition)) 29 | { 30 | Selection.activeGameObject = animators[i].gameObject; 31 | } 32 | 33 | } 34 | 35 | GUILayout.EndVertical(); 36 | 37 | GUILayout.EndScrollView(); 38 | } 39 | 40 | public void Reset() 41 | { 42 | selectedAnimator = null; 43 | animators.Clear(); 44 | scrollPos = Vector2.zero; 45 | } 46 | 47 | 48 | public Animator GetSelectedAnimator() 49 | { 50 | return selectedAnimator; 51 | } 52 | 53 | } 54 | } -------------------------------------------------------------------------------- /Editor/AnimatorSelectionWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 09843f7d10b139a4dafa4ab68ffe36b4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AssetBrowser.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb1b6b28ce95c4df1a151646c6f2944d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: 7 | - m_ViewDataDictionary: {instanceID: 0} 8 | - m_GUISkin: {fileID: 11400000, guid: c75fb1faca08ce0489b2658fbb00ff7a, type: 2} 9 | executionOrder: 0 10 | icon: {instanceID: 0} 11 | userData: 12 | assetBundleName: 13 | assetBundleVariant: 14 | -------------------------------------------------------------------------------- /Editor/AssetManageHelpers.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 84895509661372447bd2983f1502e42d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/ColliderNameRules.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | 4 | namespace LookDev.Editor 5 | { 6 | public class ColliderNameRules : ScriptableObject 7 | { 8 | static readonly string colliderNameRuleAsset = "Assets/LookDev/Settings/ColliderRule/ColliderAutoGenerate.asset"; 9 | 10 | [Header("Collider Prefix Rules")] 11 | public string boxCollider; 12 | public string capsuleCollider; 13 | public string sphereCollider; 14 | public string meshConvexCollider; 15 | public string meshCollider; 16 | 17 | public static string DefaultColliderAssetPath 18 | { 19 | get 20 | { 21 | return colliderNameRuleAsset; 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Editor/ColliderNameRules.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34241fe569090b84fb2079a8e8aa8e32 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/CreateLightGroupWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1c5c5f713e69f384baeef555d5a22fee 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/CreateLightPresetWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 32bd03b8ec45f604ebcbcb489a8fca2d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/CreateNewFilterWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4afa3a712ba8cc44e8595f19f31337f7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/DragDropModelPostProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4379b0f02ee4c0997e044608bddf294 3 | timeCreated: 1621648385 -------------------------------------------------------------------------------- /Editor/EmptyPane.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | 3 | namespace LookDev.Editor 4 | { 5 | public class EmptyPane : EditorWindow 6 | { 7 | private void OnGUI() 8 | { 9 | 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /Editor/EmptyPane.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7c3aa151391d024ebf2ca1f88cde386 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/External.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e88bbcc551c7604895235c57b05cb7f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/External/SymlinkUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7c49dadefb013e24db388a0bc7ab11a6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/FbxTool.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEditor; 5 | using UnityEditor.Formats.Fbx.Exporter; 6 | 7 | using System.IO; 8 | 9 | namespace LookDev.Editor 10 | { 11 | public class FbxTool 12 | { 13 | public static void ExportGameObjects(GameObject[] objects) 14 | { 15 | 16 | List objectsToBeExported = new List(); 17 | 18 | foreach (GameObject obj in objects) 19 | { 20 | Renderer currentRenderer = obj.GetComponent(); 21 | 22 | if (currentRenderer != null) 23 | { 24 | if (currentRenderer.GetType() == typeof(SkinnedMeshRenderer)) 25 | { 26 | SkinnedMeshRenderer skinnedMeshRenderer = currentRenderer as SkinnedMeshRenderer; 27 | 28 | if (skinnedMeshRenderer.sharedMesh != null) 29 | objectsToBeExported.Add(obj); 30 | if (skinnedMeshRenderer.rootBone != null) 31 | { 32 | Transform target; 33 | 34 | if (skinnedMeshRenderer.rootBone.localPosition != Vector3.zero) 35 | target = skinnedMeshRenderer.rootBone.parent; 36 | else 37 | target = skinnedMeshRenderer.rootBone; 38 | 39 | if (objectsToBeExported.Contains(target.gameObject) == false) 40 | objectsToBeExported.Add(target.gameObject); 41 | } 42 | } 43 | else if (currentRenderer.GetType() == typeof(MeshRenderer)) 44 | { 45 | MeshFilter meshFilter = obj.GetComponent(); 46 | 47 | if (meshFilter != null) 48 | { 49 | if (meshFilter.sharedMesh != null) 50 | objectsToBeExported.Add(obj); 51 | } 52 | } 53 | } 54 | } 55 | 56 | 57 | if (objectsToBeExported.Count == 0) 58 | return; 59 | 60 | string targetFBXPath = Path.Combine(LookDevHelpers.LookDevSubdirectoryForModel, objects[0].name + ".fbx"); 61 | targetFBXPath = targetFBXPath.Replace("\\", "/"); 62 | 63 | 64 | targetFBXPath = AssetDatabase.GenerateUniqueAssetPath($"Assets/{targetFBXPath}"); 65 | 66 | 67 | targetFBXPath = targetFBXPath.Replace("Assets/", string.Empty); 68 | 69 | string targetFBXFullPath = Path.Combine(Application.dataPath, targetFBXPath); 70 | targetFBXFullPath = targetFBXFullPath.Replace("\\", "/"); 71 | 72 | ModelExporter.ExportObjects(targetFBXFullPath, objectsToBeExported.ToArray()); 73 | 74 | } 75 | 76 | } 77 | } -------------------------------------------------------------------------------- /Editor/FbxTool.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87e953a3c5de71f4a8d12bb519b9a396 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/FeedbackWindow.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEditor; 5 | using UnityEngine; 6 | using UnityEngine.UIElements; 7 | 8 | namespace LookDev.Editor 9 | { 10 | public class FeedbackWindow : EditorWindow 11 | { 12 | void OnEnable() 13 | { 14 | GenerateVisualElement(this); 15 | } 16 | 17 | static string _videoLink = "https://www.youtube.com/watch?v=aTD7eoEiNQ0"; 18 | static string _forumLink = "https://forum.unity.com/threads/lookdev-studio.1148474/"; 19 | static string _feedbackLink = "https://unitysoftware.co1.qualtrics.com/jfe/form/SV_b2Bu8eT7dnWtx7U"; 20 | 21 | private static void GenerateVisualElement(FeedbackWindow instance) 22 | { 23 | var uxml = AssetDatabase.LoadAssetAtPath("Packages/com.unity.lookdevstudio/UI/Feedback.uxml"); 24 | uxml.CloneTree(instance.rootVisualElement); 25 | 26 | instance.rootVisualElement.Q