12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- namespace UnityEditor.Rendering.Universal.ShaderGUI
- {
- internal class ParticlesLitShader : BaseShaderGUI
- {
- // Properties
- private LitGUI.LitProperties litProperties;
- private ParticleGUI.ParticleProperties particleProps;
- // List of renderers using this material in the scene, used for validating vertex streams
- List<ParticleSystemRenderer> m_RenderersUsingThisMaterial = new List<ParticleSystemRenderer>();
- public override void FindProperties(MaterialProperty[] properties)
- {
- base.FindProperties(properties);
- litProperties = new LitGUI.LitProperties(properties);
- particleProps = new ParticleGUI.ParticleProperties(properties);
- }
- public override void MaterialChanged(Material material)
- {
- if (material == null)
- throw new ArgumentNullException("material");
- SetMaterialKeywords(material, LitGUI.SetMaterialKeywords, ParticleGUI.SetMaterialKeywords);
- }
- public override void DrawSurfaceOptions(Material material)
- {
- // Detect any changes to the material
- EditorGUI.BeginChangeCheck();
- {
- base.DrawSurfaceOptions(material);
- DoPopup(ParticleGUI.Styles.colorMode, particleProps.colorMode, Enum.GetNames(typeof(ParticleGUI.ColorMode)));
- }
- if (EditorGUI.EndChangeCheck())
- {
- foreach (var obj in blendModeProp.targets)
- MaterialChanged((Material)obj);
- }
- }
- public override void DrawSurfaceInputs(Material material)
- {
- base.DrawSurfaceInputs(material);
- LitGUI.Inputs(litProperties, materialEditor, material);
- DrawEmissionProperties(material, true);
- }
- public override void DrawAdvancedOptions(Material material)
- {
- EditorGUI.BeginChangeCheck();
- {
- materialEditor.ShaderProperty(particleProps.flipbookMode, ParticleGUI.Styles.flipbookMode);
- ParticleGUI.FadingOptions(material, materialEditor, particleProps);
- ParticleGUI.DoVertexStreamsArea(material, m_RenderersUsingThisMaterial, true);
- }
- base.DrawAdvancedOptions(material);
- }
- public override void OnOpenGUI(Material material, MaterialEditor materialEditor)
- {
- CacheRenderersUsingThisMaterial(material);
- base.OnOpenGUI(material, materialEditor);
- }
- void CacheRenderersUsingThisMaterial(Material material)
- {
- m_RenderersUsingThisMaterial.Clear();
- ParticleSystemRenderer[] renderers = UnityEngine.Object.FindObjectsOfType(typeof(ParticleSystemRenderer)) as ParticleSystemRenderer[];
- foreach (ParticleSystemRenderer renderer in renderers)
- {
- if (renderer.sharedMaterial == material)
- m_RenderersUsingThisMaterial.Add(renderer);
- }
- }
- }
- } // namespace UnityEditor
|