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

95 行
2.4 KiB

using System;
using UnityEngine;
namespace UnityEditor.Graphs.Material
{
[Title("Generate/Vector 4 Node")]
class Vector4Node : PropertyNode, IGeneratesBodyCode
{
[SerializeField]
private Vector4 m_Value;
public override void Init()
{
base.Init();
name = "V4Node";
AddSlot(new Slot(SlotType.OutputSlot, "Value"));
}
public override PropertyType propertyType
{
get { return PropertyType.Vector4; }
}
public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
{
if (HasBoundProperty() || !generationMode.IsPreview ())
return;
visitor.AddShaderProperty (new VectorPropertyChunk (GetPropertyName (), GetPropertyName (), m_Value, 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)
{
if (HasBoundProperty() || generationMode.IsPreview ())
return;
visitor.AddShaderChunk (precision+"4 " + GetPropertyName() + " = "+precision+"4 (" + m_Value.x + ", " + m_Value.y + ", " + m_Value.z + ", " + m_Value.w + ");", true);
}
public override void NodeUI (Graphs.GraphGUI host)
{
base.NodeUI(host);
EditorGUI.BeginChangeCheck ();
m_Value = EditorGUILayout.Vector4Field("Value", m_Value, GUILayout.Width (170));
if (EditorGUI.EndChangeCheck())
{
var boundProp = boundProperty as VectorProperty;
if (boundProp != null)
{
boundProp.defaultVector = m_Value;
}
UpdatePreviewProperties ();
}
}
public override void BindProperty(ShaderProperty property, bool rebuildShaders)
{
base.BindProperty(property, rebuildShaders);
var vectorProp = property as VectorProperty;
if (vectorProp)
{
m_Value = vectorProp.defaultVector;
}
if (rebuildShaders)
RegeneratePreviewShaders();
else
UpdatePreviewProperties();
}
public override PreviewProperty GetPreviewProperty ()
{
return new PreviewProperty {
m_Name = GetPropertyName (),
m_PropType = PropertyType.Vector4,
m_Vector4 = m_Value
};
}
}
}