383 lines
16 KiB
C#
383 lines
16 KiB
C#
// -----------------------------------------------------------------------
|
||
// This file is part of PandaShader VFXGUI.
|
||
//
|
||
// (c) sunhainan (2022/11/28 14:45:51)
|
||
//
|
||
// For the full copyright and license information, please view the LICENSE
|
||
// file that was distributed with this source code.
|
||
// -----------------------------------------------------------------------
|
||
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
|
||
namespace Yoka.MGame.PandaShader
|
||
{
|
||
public partial class PandavfxGUI
|
||
{
|
||
//自定义主要贴图需要显示的属性
|
||
private MaterialProperty mainTex_Sampler = null;
|
||
private MaterialProperty TinColor = null;
|
||
private MaterialProperty MainUspeed = null;
|
||
private MaterialProperty MainVspeed = null;
|
||
//private MaterialProperty MainTexrotat = null;
|
||
private MaterialProperty MainTexC = null;
|
||
private MaterialProperty MainTexCV = null;
|
||
private MaterialProperty MainTexAR = null;
|
||
private MaterialProperty BackFaceColor = null;
|
||
private MaterialProperty Face = null;
|
||
private MaterialProperty MainOffsetUC1 = null;
|
||
|
||
private MaterialProperty MainOffsetVC1 = null;
|
||
|
||
private MaterialProperty MainTexUVS = null;
|
||
//private MaterialProperty TexCenter = null;
|
||
//private MaterialProperty CenterU = null;
|
||
//private MaterialProperty CenterV = null;
|
||
|
||
private MaterialProperty MainOffsetUC2Vec4 = null;
|
||
private CUSTOMDATA MainOffsetUC2Enum = CUSTOMDATA.X;
|
||
private MaterialProperty MainOffsetVC2Vec4 = null;
|
||
private CUSTOMDATA MainOffsetVC2Enum = CUSTOMDATA.Y;
|
||
|
||
MaterialProperty MainRotate = null;
|
||
|
||
void OnGUIMainTexture(Material material)
|
||
{
|
||
//主帖图下拉菜单
|
||
if (mainTex_Sampler.textureValue != null)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
|
||
_Maintextures_Foldout = Foldout(_Maintextures_Foldout, "主贴图(MainTexture)");
|
||
|
||
if (_Maintextures_Foldout)
|
||
{
|
||
EditorGUI.indentLevel++;
|
||
GUIMainTexture(material);
|
||
EditorGUI.indentLevel--;
|
||
}
|
||
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
else
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
_Maintextures_Foldout = Foldout2(_Maintextures_Foldout, "主贴图(MainTexture)");
|
||
|
||
if (_Maintextures_Foldout)
|
||
{
|
||
EditorGUI.indentLevel++;
|
||
GUIMainTexture(material);
|
||
EditorGUI.indentLevel--;
|
||
}
|
||
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
}
|
||
|
||
//主帖图具体显示内容
|
||
void GUIMainTexture(Material material)
|
||
{
|
||
m_MaterialEditor.TexturePropertySingleLine(new GUIContent("主贴图"), mainTex_Sampler, TinColor, BackFaceColor);
|
||
m_MaterialEditor.ShaderProperty(MainTexAR, "使用R通道");
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*主贴图用做主色纹理基底,后面跟着的两个颜色变量分别为正面主色和背面叠加色", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
if (mainTex_Sampler.textureValue != null)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
_Mainxx = Foldouts(_Mainxx, "贴图设置(点击打开)");
|
||
|
||
if (_Mainxx)
|
||
{
|
||
EditorGUI.indentLevel++;
|
||
|
||
EditorGUILayout.BeginHorizontal();
|
||
m_MaterialEditor.ShaderProperty(MainTexC, "UVClamp");
|
||
|
||
m_MaterialEditor.ShaderProperty(MainTexCV, "");
|
||
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*两个复选框分别表示贴图U方向Clamp和V方向Clamp,可以勾选其中一个,也可以两个方向都勾选", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
m_MaterialEditor.ShaderProperty(MainTexAR, "使用R通道");
|
||
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*勾选后Red通道成为透明通道,不勾选,Alpha通道为透明通道,没有透明通道的黑白图可以勾选此选项,有透明通道不要勾选", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
m_MaterialEditor.ShaderProperty(MainRotate, "贴图旋转");
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*贴图旋转,处理贴图朝向,省去复制贴图改变朝向", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
|
||
EditorGUI.indentLevel--;
|
||
}
|
||
|
||
EditorGUILayout.EndVertical();
|
||
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*展开后可以对贴图属性做一些设置,包含uvclamp,透明通道,旋转,校色", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
m_MaterialEditor.TextureScaleOffsetProperty(mainTex_Sampler);
|
||
EditorGUILayout.EndVertical();
|
||
GUILayout.Space(5);
|
||
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.PrefixLabel("自定义偏移");
|
||
if (material.GetFloat("_CustomdataMainTexUV") == 0)
|
||
{
|
||
if (GUILayout.Button("已关闭", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_CustomdataMainTexUV", 1);
|
||
material.EnableKeyword("_MAINTEX_CUSTOMDATA");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (GUILayout.Button("已开启", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_CustomdataMainTexUV", 0);
|
||
material.DisableKeyword("_MAINTEX_CUSTOMDATA");
|
||
}
|
||
}
|
||
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
if (material.GetFloat("_CustomdataMainTexUV") == 1)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
m_MaterialEditor.ShaderProperty(MainOffsetUC1, "U数据");
|
||
DrawCustomDataEnum(ref MainOffsetUC2Vec4, ref MainOffsetUC2Enum, "U通道");
|
||
|
||
GUILayout.Space(5);
|
||
|
||
m_MaterialEditor.ShaderProperty(MainOffsetVC1, "V数据");
|
||
DrawCustomDataEnum(ref MainOffsetVC2Vec4, ref MainOffsetVC2Enum, "V通道");
|
||
|
||
EditorGUILayout.EndVertical();
|
||
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
EditorGUILayout.BeginHorizontal();
|
||
|
||
EditorGUILayout.PrefixLabel("影响多功能图");
|
||
|
||
if (material.GetFloat("_CAddTexUV") == 0)
|
||
{
|
||
if (GUILayout.Button("已关闭", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_CAddTexUV", 1);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (GUILayout.Button("已开启", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_CAddTexUV", 0);
|
||
}
|
||
}
|
||
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
m_MaterialEditor.ShaderProperty(CAddTexUVT, "同速偏移");
|
||
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label(
|
||
"*开启自定义数据控制贴图UVOffset,制作贴图一次性流动使用,开启自定义数据时请先custom1.xyzw,再添加custom2.xyzw,然后默认custom1.x控制U方向Offset,custom1.y控制V方向Offset,可自定义数据",
|
||
style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
EditorGUILayout.EndVertical();
|
||
|
||
GUILayout.Space(5);
|
||
|
||
//EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
//m_MaterialEditor.ShaderProperty(MainTexUVS, "UV选择");
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label(
|
||
"*包含normal默认UV,polar极坐标UV,cylinder圆筒UV三种模式,默认UV即模型自带UV,极坐标即中心向四周扩散UV,圆筒UV即世界坐标下一个圆筒包裹的UV,主帖图设置圆筒UV可以制作角色身上能量流动,或者渐变效果",
|
||
style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
// if (material.GetFloat("_MainTexUVS") == 1)
|
||
// {
|
||
// EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
// m_MaterialEditor.ShaderProperty(CenterU, "中心U");
|
||
// m_MaterialEditor.ShaderProperty(CenterV, "中心V");
|
||
// EditorGUILayout.EndVertical();
|
||
//
|
||
// if (_tips == true)
|
||
// {
|
||
// EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
// style.fontSize = 10;
|
||
// style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
// GUILayout.Label("*极坐标UV中心点位置", style);
|
||
// EditorGUILayout.EndVertical();
|
||
// }
|
||
// }
|
||
//
|
||
// if (material.GetFloat("_MainTexUVS") == 2)
|
||
// {
|
||
// m_MaterialEditor.ShaderProperty(Face, "圆柱朝向");
|
||
//
|
||
// if (_tips == true)
|
||
// {
|
||
// EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
// style.fontSize = 10;
|
||
// style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
// GUILayout.Label("*世界坐标系下圆柱UV的朝向", style);
|
||
// EditorGUILayout.EndVertical();
|
||
// }
|
||
//
|
||
// m_MaterialEditor.ShaderProperty(TexCenter, "圆柱中心");
|
||
//
|
||
// if (_tips == true)
|
||
// {
|
||
// EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
// style.fontSize = 10;
|
||
// style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
// GUILayout.Label("*世界坐标系下圆柱UV的位置", style);
|
||
// EditorGUILayout.EndVertical();
|
||
// }
|
||
// }
|
||
|
||
//EditorGUILayout.EndVertical();
|
||
|
||
//GUILayout.Space(5);
|
||
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
m_MaterialEditor.ShaderProperty(MainUspeed, "U流动");
|
||
m_MaterialEditor.ShaderProperty(MainVspeed, "V流动");
|
||
EditorGUILayout.EndVertical();
|
||
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*主帖图的UV流动速度值", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
GUILayout.Space(5);
|
||
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.PrefixLabel("多功能图");
|
||
if (material.GetFloat("_IfAddTex") == 0)
|
||
{
|
||
if (GUILayout.Button("已关闭", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_IfAddTex", 1);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (GUILayout.Button("已开启", shortButtonStyle))
|
||
{
|
||
material.SetFloat("_IfAddTex", 0);
|
||
}
|
||
}
|
||
|
||
EditorGUILayout.EndHorizontal();
|
||
if (_tips == true)
|
||
{
|
||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||
style.fontSize = 10;
|
||
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
|
||
GUILayout.Label("*多功能图是在主贴图的基础上增加纹理细节,透明通道细节的额外贴图,可以叠加颜色,也可以充当遮罩等等", style);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
if (mainTex_Sampler.textureValue == null)
|
||
{
|
||
material.SetFloat("_IfAddTex", 0);
|
||
}
|
||
|
||
if (material.GetFloat("_IfAddTex") == 0)
|
||
{
|
||
material.SetFloat("_AddTexBlend", 0);
|
||
material.SetFloat("_AddTexBlendMode", 0);
|
||
}
|
||
}
|
||
|
||
void FindPropertiesMainTexture(MaterialProperty[] props)
|
||
{
|
||
//主贴图属性指向
|
||
mainTex_Sampler = FindProperty("_MainTex", props);
|
||
TinColor = FindProperty("_MainColor", props);
|
||
MainUspeed = FindProperty("_MainTex_Uspeed", props);
|
||
MainVspeed = FindProperty("_MainTex_Vspeed", props);
|
||
MainTexC = FindProperty("_MaintexC", props);
|
||
MainTexCV = FindProperty("_MaintexCV", props);
|
||
MainTexAR = FindProperty("_MainTex_ar", props);
|
||
BackFaceColor = FindProperty("_BackFaceColor", props);
|
||
Face = FindProperty("_Face", props);
|
||
//MainTexUVS = FindProperty("_MainTexUVS", props);
|
||
//TexCenter = FindProperty("_TexCenter", props);
|
||
//CenterU = FindProperty("_CenterU", props);
|
||
//CenterV = FindProperty("_CenterV", props);
|
||
MainOffsetUC1 = FindProperty("_MainOffsetUC1", props);
|
||
MainOffsetUC2Vec4 = FindProperty("_MainOffsetUC2Vec4", props);
|
||
MainOffsetVC1 = FindProperty("_MainOffsetVC1", props);
|
||
MainOffsetVC2Vec4 = FindProperty("_MainOffsetVC2Vec4", props);
|
||
|
||
MainOffsetUC2Enum = ConvertCustomDataEnum(MainOffsetUC2Vec4);
|
||
MainOffsetVC2Enum = ConvertCustomDataEnum(MainOffsetVC2Vec4);
|
||
|
||
MainRotate = FindProperty("_MainTex_rotat", props);
|
||
}
|
||
}
|
||
} |