您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
84 行
3.0 KiB
84 行
3.0 KiB
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace UnityEditor.Experimental.VFX.Toolbox.ImageSequencer
|
|
{
|
|
[Processor("","Custom Material")]
|
|
class CustomMaterialProcessor : ProcessorBase
|
|
{
|
|
[FormerlySerializedAs("material")]
|
|
public Material customMaterial;
|
|
|
|
public override string shaderPath => "Packages/com.unity.vfx-toolbox/Editor/ImageSequencer/Shaders/Null.shader";
|
|
|
|
public override string processorName => "Custom Material";
|
|
|
|
public override string label => $"{processorName} ({((customMaterial == null) ? "Not Set" : customMaterial.name)})";
|
|
|
|
public override void Default()
|
|
{
|
|
customMaterial = null;
|
|
}
|
|
|
|
public override bool Process(int frame)
|
|
{
|
|
Texture inputFrame = RequestInputTexture(frame);
|
|
|
|
if (customMaterial != null)
|
|
{
|
|
customMaterial.SetTexture("_InputFrame", inputFrame);
|
|
customMaterial.SetVector("_FrameData", new Vector4(inputSequenceWidth, inputSequenceHeight, frame, sequenceLength));
|
|
customMaterial.SetVector("_FlipbookData", new Vector4(inputSequenceNumU, inputSequenceNumV, 0, 0));
|
|
ProcessFrame(frame, inputFrame, customMaterial);
|
|
}
|
|
else
|
|
{
|
|
material.SetTexture("_MainTex", inputFrame);
|
|
ProcessFrame(frame, inputFrame);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private Editor m_MaterialEditor;
|
|
private Shader m_CachedShader;
|
|
|
|
public override bool OnInspectorGUI(bool changed, SerializedObject serializedObject)
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
Material mat = (Material)EditorGUILayout.ObjectField(VFXToolboxGUIUtility.Get("Material"), customMaterial, typeof(Material), false);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
Undo.RecordObject(this, "Custom Material Change");
|
|
customMaterial = mat;
|
|
EditorUtility.SetDirty(this);
|
|
Invalidate();
|
|
changed = true;
|
|
}
|
|
|
|
if (customMaterial != null)
|
|
{
|
|
Editor.CreateCachedEditor(customMaterial, typeof(MaterialEditor), ref m_MaterialEditor);
|
|
EditorGUI.BeginChangeCheck();
|
|
m_MaterialEditor.DrawHeader();
|
|
EditorGUIUtility.labelWidth = 120;
|
|
m_MaterialEditor.OnInspectorGUI();
|
|
|
|
if (m_CachedShader != customMaterial.shader)
|
|
{
|
|
// Hack : we cache shader in order to track changes as DrawHeader does not consider shader change as a EditorGUI.changed
|
|
m_CachedShader = customMaterial.shader;
|
|
GUI.changed = true;
|
|
}
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
Invalidate();
|
|
changed = true;
|
|
}
|
|
|
|
}
|
|
return changed;
|
|
}
|
|
|
|
}
|
|
}
|