using UnityEditor.ShaderGraph.Drawing.Controls; using UnityEngine; using UnityEditor.Graphing; namespace UnityEditor.ShaderGraph { [Title("Input", "Geometry", "UV")] public class UVNode : AbstractMaterialNode, IGeneratesBodyCode, IMayRequireMeshUV { public const int OutputSlotId = 0; private const string kOutputSlotName = "Out"; [SerializeField] private UVChannel m_OutputChannel; [EnumControl("Channel")] public UVChannel uvChannel { get { return m_OutputChannel; } set { if (m_OutputChannel == value) return; m_OutputChannel = value; Dirty(ModificationScope.Graph); } } public override bool hasPreview { get { return true; } } public UVNode() { name = "UV"; UpdateNodeAfterDeserialization(); } public override void UpdateNodeAfterDeserialization() { AddSlot(new Vector4MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector2.zero)); RemoveSlotsNameNotMatching(new[] { OutputSlotId }); } public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode) { visitor.AddShaderChunk(string.Format("{0}4 {1} = IN.{2};", precision, GetVariableNameForSlot(OutputSlotId), m_OutputChannel.GetUVName()), true); } public bool RequiresMeshUV(UVChannel channel) { return channel == uvChannel; } } }