#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityEngine.Rendering
{
///
/// Setup a specific render pipeline on scene loading.
/// This need to be used with caution as it will change project configuration.
///
#if UNITY_EDITOR
[ExecuteAlways]
#endif
public class SceneRenderPipeline : MonoBehaviour
{
#if UNITY_EDITOR
[SerializeField] bool firstTimeCreated = true;
///
/// Scriptable Render Pipeline Asset to setup on scene load.
///
public RenderPipelineAsset renderPipelineAsset;
void Awake()
{
if (firstTimeCreated)
{
renderPipelineAsset = GraphicsSettings.renderPipelineAsset;
firstTimeCreated = false;
}
//Send analytics each time to find usage in content dl on the asset store too
SceneRenderPipelineAnalytic.Send(this);
}
void OnEnable()
{
GraphicsSettings.renderPipelineAsset = renderPipelineAsset;
}
static class SceneRenderPipelineAnalytic
{
const int k_MaxEventsPerHour = 100;
const int k_MaxNumberOfElements = 1000;
const string k_VendorKey = "unity.srp";
[System.Diagnostics.DebuggerDisplay("{scene_guid}")]
internal struct Data
{
internal const string k_EventName = "sceneRenderPipelineAssignment";
// Naming convention for analytics data
public string scene_guid;
};
internal static void Send(SceneRenderPipeline sender)
{
if (!EditorAnalytics.enabled || EditorAnalytics.RegisterEventWithLimit(Data.k_EventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey) != UnityEngine.Analytics.AnalyticsResult.Ok)
return;
var data = new Data() { scene_guid = sender.gameObject.scene.GetGUID() };
EditorAnalytics.SendEventWithLimit(Data.k_EventName, data);
}
}
#endif
}
}