Skip to content

Commit ec06159

Browse files
arttu-peltonenEvergreen
authored andcommitted
Fix errors & black screen when resetting active URP Asset from UI
1 parent 41aa8ed commit ec06159

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,18 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset<Universa
699699
#if UNITY_EDITOR
700700
public static readonly string packagePath = "Packages/com.unity.render-pipelines.universal";
701701

702+
internal void Reset()
703+
{
704+
// If the asset path is valid, it means we are explicitly resetting an existing asset, so we will create
705+
// a new default renderer asset to avoid errors. If the path is invalid, it means we are creating a new asset
706+
// for which the default renderer is provided through UniversalRenderPipelineAsset.Create.
707+
string path = AssetDatabase.GetAssetPath(this);
708+
if (!string.IsNullOrEmpty(path))
709+
{
710+
m_RendererDataList[0] = CreateRendererAsset(path, m_RendererType);
711+
}
712+
}
713+
702714
public static UniversalRenderPipelineAsset Create(ScriptableRendererData rendererData = null)
703715
{
704716
// Create Universal RP Asset

Packages/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalCameraData.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,9 @@ public ScriptableRenderer scriptableRenderer
671671
if (!UniversalRenderPipeline.asset.ValidateRendererData(m_RendererIndex))
672672
{
673673
int defaultIndex = UniversalRenderPipeline.asset.m_DefaultRendererIndex;
674+
var defaultRendererData = UniversalRenderPipeline.asset.m_RendererDataList[defaultIndex];
674675
Debug.LogWarning(
675-
$"Renderer at <b>index {m_RendererIndex.ToString()}</b> is missing for camera <b>{camera.name}</b>, falling back to Default Renderer. <b>{UniversalRenderPipeline.asset.m_RendererDataList[defaultIndex].name}</b>",
676+
$"Renderer at <b>index {m_RendererIndex.ToString()}</b> is missing for camera <b>{camera.name}</b>, falling back to Default Renderer. <b>{defaultRendererData?.name}</b>",
676677
UniversalRenderPipeline.asset);
677678
return UniversalRenderPipeline.asset.GetRenderer(defaultIndex);
678679
}

Packages/com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,27 @@ public void ValidateAssetSettings()
121121
ScriptableObject.DestroyImmediate(data);
122122
}
123123

124+
[Test]
125+
public void ValidateDefaultRendererAfterReset()
126+
{
127+
UniversalRendererData data = ScriptableObject.CreateInstance<UniversalRendererData>();
128+
UniversalRenderPipelineAsset asset = UniversalRenderPipelineAsset.Create(data);
129+
const string kTempDir = "Assets/ValidateDefaultRendererAfterReset";
130+
string assetPath = $"{kTempDir}/URPAsset.asset";
131+
CoreUtils.EnsureFolderTreeInAssetFilePath(assetPath);
132+
AssetDatabase.CreateAsset(asset, assetPath);
133+
AssetDatabase.SaveAssets();
134+
string path = AssetDatabase.GetAssetPath(asset);
135+
Assume.That(!string.IsNullOrEmpty(path));
136+
137+
Assert.NotNull(asset.m_RendererDataList[asset.m_DefaultRendererIndex]);
138+
Unsupported.SmartReset(asset);// will create a new default renderer data
139+
Assert.NotNull(asset.m_RendererDataList[asset.m_DefaultRendererIndex]);
140+
141+
ScriptableObject.DestroyImmediate(data);
142+
AssetDatabase.DeleteAsset(kTempDir);
143+
}
144+
124145
// When working with SpeedTree v7 assets, UniversalSpeedTree8Upgrader should not throw exception
125146
[Test]
126147
public void UniversalSpeedTree8Upgrader_ShouldntThrowExceptionWhenImportingSpeedTree7Assets()

0 commit comments

Comments
 (0)