您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

99 行
2.5 KiB

using System;
using System.Linq;
using UnityEngine;
namespace UnityEditor.Graphs.Material
{
[Title("Generate/Color Node")]
class ColorNode : PropertyNode, IGeneratesBodyCode
{
[SerializeField]
private Color m_Color;
private const string kOutputSlotName = "Color";
public override void Init()
{
base.Init ();
name = "ColorNode";
AddSlot(new Slot(SlotType.OutputSlot, kOutputSlotName));
}
public override PropertyType propertyType
{
get { return PropertyType.Color; }
}
public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview ())
return;
visitor.AddShaderProperty (new ColorPropertyChunk (GetPropertyName (), GetPropertyName (), m_Color, true));
}
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)
{
return GetPropertyName();
}
public override void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview ())
return;
visitor.AddShaderChunk("float4 " + GetPropertyName() + ";", true);
}
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode)
{
// we only need to generate node code if we are using a constant... otherwise we can just refer to the property :)
if (HasBoundProperty() || generationMode.IsPreview ())
return;
visitor.AddShaderChunk (precision+"4 " + GetPropertyName () + " = "+precision+"4 (" + m_Color.r + ", " + m_Color.g + ", " + m_Color.b + ", " + m_Color.a + ");", true);
}
public override void NodeUI (Graphs.GraphGUI host)
{
base.NodeUI(host);
EditorGUI.BeginChangeCheck ();
m_Color = EditorGUILayout.ColorField(m_Color);
if (EditorGUI.EndChangeCheck())
{
var boundProp = boundProperty as ColorProperty;
if (boundProp != null)
{
boundProp.defaultColor = m_Color;
}
UpdatePreviewProperties ();
}
}
public override void BindProperty(ShaderProperty property, bool rebuildShaders)
{
base.BindProperty(property, rebuildShaders);
var colorProp = property as ColorProperty;
if (colorProp)
{
m_Color = colorProp.defaultColor;
}
if (rebuildShaders)
RegeneratePreviewShaders();
else
UpdatePreviewProperties();
}
public override PreviewProperty GetPreviewProperty ()
{
return new PreviewProperty {
m_Name = GetPropertyName (),
m_PropType = PropertyType.Color,
m_Color = m_Color
};
}
}
}