我有一个自定义资产,类型为
[System.Serializable]
public class Ranges: ScriptableObject
{
public Vector4[] minPoints;
public Vector4[] ranges;
}相应的着色器定义了两个统一
half4 _coeffMins[25];
half4 _coeffRanges[25];我可以使用Material.SetVectorArray设置制服,但是,我希望能够使用着色器将自定义资源直接拖动到材质的属性检查器中的某个窗口中。
有MaterialPropertyDrawer,但是它看起来像是MaterialProperty,传递的OnGUI函数不支持数组。
有支持数组的MaterialPropertyBlock,但我不知道如何使用它来创建自定义属性抽屉。
那么,我如何创建一个material属性和相应的属性抽屉,将我的自定义可脚本化对象作为类型?
发布于 2020-09-15 01:09:03
我的方法是为material属性抽屉创建自定义编辑器,然后添加一个新的对象字段,它将接受您的对象,,并将数据挂接到该材质的更改上,以基于此数据更改Material.SetVectorArray。
[CustomEditor(typeof(Material))]
public class MyMaterialEditor : UnityEditor.Editor
{
Ranges source = new Ranges();
public override void OnInspectorGUI()
{
var material = ((Material) serializedObject.targetObject);
if (material.name == "DryWallPainted_Mat") // or other way to identify your material in editor
{
source = (Ranges) EditorGUILayout.ObjectField((Object) source, typeof(Ranges), true);
if (source != null && source.ranges != null && source.minPoints != null)
{
material.SetVectorArray("minPoints", source.minPoints);
material.SetVectorArray("ranges", source.ranges);
EditorUtility.SetDirty(material); //important
}
}
DrawDefaultInspector();
}
}结果:

https://stackoverflow.com/questions/63886810
复制相似问题