sure thing, here you go
public class ColorPalette : ScriptableObject
{
public Gradient m_gradient = DefaultGradient();
[SerializeField, Range(2, 256)]
private int m_resolution = 256;
[SerializeField, ReadOnly]
private Texture2D m_gradientTexture;
public Texture2D GradienTexture => m_gradientTexture;
public static Gradient DefaultGradient()
{
}
private void OnEnable()
{
if (m_gradientTexture == null)
{
UpdateGradientTexture();
AssetDatabase.AddObjectToAsset(m_gradientTexture, this);
}
}
private void OnValidate()
{
if (m_gradientTexture != null)
m_gradientTexture.name = name;
UpdateGradientTexture();
}
private void UpdateGradientTexture()
{
var subAssets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this));
if (subAssets != null && subAssets[0] != m_gradientTexture)
{
m_gradientTexture = subAssets[0] as Texture2D;
}
if (m_gradientTexture == null || !AssetDatabase.IsSubAsset(m_gradientTexture))
{
m_gradientTexture = new Texture2D(m_resolution, 1, TextureFormat.RGBA32, false)
{
name = name,
wrapMode = TextureWrapMode.Clamp,
filterMode = FilterMode.Point,
};
}
for (int x = 0; x < m_resolution; x++)
m_gradientTexture.SetPixel(x, 0, m_gradient.Evaluate((float)x / (m_resolution - 1)));
m_gradientTexture.Apply();
}
}