ソースコード
using System.Collections.Generic; using UnityEngine; namespace Kogane { public static class GradientExtensionMethods { public static Gradient GetSubGradient ( this Gradient self, float min, float max ) { min = Mathf.Clamp01( min ); max = Mathf.Clamp01( max ); var gradient = new Gradient(); var colorKeys = new List<GradientColorKey> { new( self.Evaluate( min ), 0 ), }; foreach ( var key in self.colorKeys ) { if ( key.time <= min ) continue; if ( max <= key.time ) continue; var time = Mathf.InverseLerp( min, max, key.time ); var colorKey = new GradientColorKey( key.color, time ); colorKeys.Add( colorKey ); } colorKeys.Add( new( self.Evaluate( max ), 1 ) ); var alphaKeys = new List<GradientAlphaKey> { new( self.Evaluate( min ).a, 0 ), }; foreach ( var key in self.alphaKeys ) { if ( key.time <= min ) continue; if ( max <= key.time ) continue; var time = Mathf.InverseLerp( min, max, key.time ); var alphaKey = new GradientAlphaKey( key.alpha, time ); alphaKeys.Add( alphaKey ); } alphaKeys.Add( new( self.Evaluate( max ).a, 1 ) ); gradient.SetKeys ( colorKeys: colorKeys.ToArray(), alphaKeys: alphaKeys.ToArray() ); return gradient; } } }