AnimatableProperty.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using UnityEngine;
  2. namespace Coffee.UIExtensions
  3. {
  4. [System.Serializable]
  5. public class AnimatableProperty : ISerializationCallbackReceiver
  6. {
  7. public enum ShaderPropertyType
  8. {
  9. Color,
  10. Vector,
  11. Float,
  12. Range,
  13. Texture,
  14. }
  15. [SerializeField] string m_Name = "";
  16. [SerializeField] ShaderPropertyType m_Type = ShaderPropertyType.Vector;
  17. public int id { get; private set; }
  18. public ShaderPropertyType type
  19. {
  20. get { return m_Type; }
  21. }
  22. public void UpdateMaterialProperties(Material material, MaterialPropertyBlock mpb)
  23. {
  24. if (!material.HasProperty(id)) return;
  25. switch (type)
  26. {
  27. case ShaderPropertyType.Color:
  28. var color = mpb.GetColor(id);
  29. if (color != default(Color))
  30. material.SetColor(id, color);
  31. break;
  32. case ShaderPropertyType.Vector:
  33. var vector = mpb.GetVector(id);
  34. if (vector != default(Vector4))
  35. material.SetVector(id, vector);
  36. break;
  37. case ShaderPropertyType.Float:
  38. case ShaderPropertyType.Range:
  39. var value = mpb.GetFloat(id);
  40. if (value != default(float))
  41. material.SetFloat(id, value);
  42. break;
  43. case ShaderPropertyType.Texture:
  44. var tex = mpb.GetTexture(id);
  45. if (tex != default(Texture))
  46. material.SetTexture(id, tex);
  47. break;
  48. }
  49. }
  50. public void OnBeforeSerialize()
  51. {
  52. }
  53. public void OnAfterDeserialize()
  54. {
  55. id = Shader.PropertyToID(m_Name);
  56. }
  57. }
  58. }