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

57 行
1.6 KiB

using UnityEngine;
namespace UnityEditor.Graphs.Material
{
abstract class Function1Input : BaseMaterialNode, IGeneratesBodyCode
{
public override bool hasPreview
{
get { return true; }
}
public override void Init()
{
base.Init ();
AddSlot (new Slot (SlotType.OutputSlot, GetOutputSlotName ()));
AddSlot (new Slot (SlotType.InputSlot, GetInputSlotName ()));
}
protected virtual string GetInputSlotName() {return "Input";}
protected virtual string GetOutputSlotName () {return "Output";}
protected abstract string GetFunctionName ();
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode)
{
var outputSlot = FindOutputSlot (GetOutputSlotName ());
var inputSlot = FindInputSlot (GetInputSlotName ());
if (inputSlot == null || outputSlot == null)
{
Debug.LogError ("Invalid slot configuration on node: " + name);
return;
}
bool inputConnected = inputSlot.edges.Count > 0;
string inputValue;
if (inputConnected)
{
var inputDateProvider = inputSlot.edges[0].fromSlot.node as BaseMaterialNode;
inputValue = inputDateProvider.GetOutputVariableNameForSlot (inputSlot.edges[0].fromSlot, generationMode);
}
else
{
var defaultValue = GetSlotDefaultValue(inputSlot.name);
inputValue = defaultValue.GetDefaultValue (generationMode);
}
visitor.AddShaderChunk(precision + "4 " + GetOutputVariableNameForSlot(outputSlot, generationMode) + " = " + GetFunctionCallBody(inputValue) + ";", true);
}
protected virtual string GetFunctionCallBody (string inputValue)
{
return GetFunctionName() + " (" + inputValue + ")";
}
}
}