Skip to content

Commit 23437c0

Browse files
committed
fix: update material conversion logic
1 parent c76ad3e commit 23437c0

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

Packages/com.mygamedevtools.scene-loader/Samples/LoadingSceneExamples/Scripts/Editor/MaterialPipelineConverter.cs

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using UnityEngine;
22
using UnityEditor;
33
using System.Collections.Generic;
4+
using System.Linq;
45
#if CONVERT_MATERIALS
56
using UnityEditor.Rendering;
67
using UnityEngine.Rendering;
@@ -14,53 +15,66 @@
1415
#endif
1516
#endif
1617

18+
[InitializeOnLoad]
1719
public static class MaterialPipelineConverter
1820
{
19-
const string _partialPath = "LoadingSceneExamples/Materials";
21+
const string _partialPath = "Loading Scene Examples/Materials";
22+
23+
static MaterialPipelineConverter()
24+
{
25+
EditorApplication.delayCall += ConvertMaterials;
26+
}
2027

2128
public static void ConvertMaterials()
2229
{
30+
RenderPipelineAsset renderPipeline = GraphicsSettings.currentRenderPipeline;
31+
if (!renderPipeline)
32+
return;
33+
2334
#if CONVERT_MATERIALS
24-
string fullPath = FindFolderByPartialPath(_partialPath);
25-
if (string.IsNullOrEmpty(fullPath))
35+
string[] materialPaths = AssetDatabase.FindAssets("t:Material")
36+
.Select(AssetDatabase.GUIDToAssetPath)
37+
.Where(path => path.Contains(_partialPath))
38+
.ToArray();
39+
40+
if (materialPaths.Length == 0)
41+
return;
42+
43+
Material[] materials = materialPaths
44+
.Select(path => AssetDatabase.LoadAssetAtPath<Material>(path))
45+
.Where(material => material != null && material.shader.name == "Standard")
46+
.ToArray();
47+
48+
if (materials.Length == 0)
2649
return;
2750

28-
List<MaterialUpgrader> upgraders = GetMaterialUpgraders();
29-
if (upgraders.Count > 0)
51+
List<MaterialUpgrader> upgraders = GetMaterialUpgraders(renderPipeline);
52+
if (upgraders.Count > 0 && EditorUtility.DisplayDialog("Sample Material Upgrader", "The sample materials have to be upgraded to match your render pipeline. Would you like to upgrade them now?", "Upgrade", "Ignore"))
3053
{
31-
MaterialUpgrader.UpgradeProjectFolder(GetMaterialUpgraders(), fullPath);
54+
foreach (Material material in materials)
55+
{
56+
MaterialUpgrader.Upgrade(material, upgraders, MaterialUpgrader.UpgradeFlags.None);
57+
}
3258
AssetDatabase.Refresh();
3359
}
3460
#endif
3561
}
3662

3763
#if CONVERT_MATERIALS
38-
static List<MaterialUpgrader> GetMaterialUpgraders()
64+
static List<MaterialUpgrader> GetMaterialUpgraders(RenderPipelineAsset renderPipeline)
3965
{
40-
RenderPipelineAsset renderPipeline = GraphicsSettings.currentRenderPipeline;
4166
List<MaterialUpgrader> upgraders = new();
42-
#if CONVERT_HDRP
43-
if (renderPipeline is HDRenderPipelineAsset)
44-
upgraders.Add(new StandardsToHDLitMaterialUpgrader("Standard", "HDRP/Lit"));
45-
#endif
4667
#if CONVERT_URP
4768
if (renderPipeline is UniversalRenderPipelineAsset)
4869
upgraders.Add(new StandardUpgrader("Standard"));
70+
#endif
71+
#if CONVERT_HDRP
72+
if (renderPipeline is HDRenderPipelineAsset)
73+
upgraders.Add(new StandardsToHDLitMaterialUpgrader("Standard", "HDRP/Lit"));
4974
#endif
5075
return upgraders;
5176
}
5277
#endif
53-
54-
static string FindFolderByPartialPath(string partialPath)
55-
{
56-
string[] allFolders = AssetDatabase.GetAllAssetPaths();
57-
foreach (string folder in allFolders)
58-
{
59-
if (folder.EndsWith(partialPath))
60-
return folder;
61-
}
62-
return null;
63-
}
6478
}
6579

6680
#if CONVERT_HDRP

Packages/com.mygamedevtools.scene-loader/Samples/LoadingSceneExamples/Scripts/Editor/SceneBuildSettingsEditor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public static class SceneBuildSettingsEditor
2222
static SceneBuildSettingsEditor()
2323
{
2424
EditorApplication.delayCall += CheckScenesInBuildSettings;
25-
EditorApplication.delayCall += MaterialPipelineConverter.ConvertMaterials;
2625
}
2726

2827
static void CheckScenesInBuildSettings()

Packages/com.mygamedevtools.scene-loader/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "com.mygamedevtools.scene-loader",
33
"version": "3.1.0",
44
"displayName": "Advanced Scene Manager",
5-
"description": "This package simplifies scene operations: load, unload and transition. In a quick example:\n\n\u2590 // Unity Manager scene transition\n\u2590 yield return SceneManager.LoadSceneAsync(\"my-loading-scene\",\n\u2590 LoadSceneMode.Additive);\n\u2590 yield return SceneManager.LoadSceneAsync(\"my-target-scene\",\n\u2590 LoadSceneMode.Additive);\n\u2590\n\u2590 SceneManager.SetActiveScene(\n\u2590 SceneManager.GetSceneByName(\"my-target-scene\"));\n\u2590\n\u2590 SceneManager.UnloadSceneAsync(\"my-loading-scene\");\n\u2590 SceneManager.UnloadSceneAsync(\"my-previous-scene\");\n\u2590\n\u2590 // Advanced Scene Manager scene transition\n\u2590 AdvancedSceneManager.TransitionAsync(\"my-target-scene\", \"my-loading-scene\");\n\nYou can also take advantage of these features:\n\n\u25aa Unified API for addressable and non-addressable scenes.\n\u25aa Awaitable scene operations.\n\u25aa Modular implementation with interfaces.\n\u25aa Load, unload or transition to multiple scenes.",
5+
"description": "This package simplifies scene operations: load, unload and transition.\nFor example, this is how you perform a scene transition:\n\n\u2503AdvancedSceneManager.TransitionAsync(\"my-target-scene\", \"my-loading-scene\");\n\nInstead of:\n\n\u2503 yield return SceneManager.LoadSceneAsync(\"my-loading-scene\",\n\u2503 LoadSceneMode.Additive);\n\u2503 yield return SceneManager.LoadSceneAsync(\"my-target-scene\",\n\u2503 LoadSceneMode.Additive);\n\u2503\n\u2503 SceneManager.SetActiveScene(\n\u2503 SceneManager.GetSceneByName(\"my-target-scene\"));\n\u2503\n\u2503 SceneManager.UnloadSceneAsync(\"my-loading-scene\");\n\u2503 SceneManager.UnloadSceneAsync(\"my-previous-scene\");\n\nYou can also take advantage of these features:\n\n\u25aa Unified API for addressable and non-addressable scenes.\n\u25aa Awaitable scene operations.\n\u25aa Modular implementation with interfaces.\n\u25aa Load, unload or transition to multiple scenes.",
66
"unity": "2021.3",
77
"keywords": [],
88
"author": {

0 commit comments

Comments
 (0)