Files
Cielonos/Assets/Shaders/PandaVFX/Editor/PandavfxGUI.AddTex.cs

253 lines
10 KiB
C#
Raw Normal View History

2025-12-08 05:27:53 -05:00
// -----------------------------------------------------------------------
// This file is part of
//
// (c) sunhainan (2022/11/28 14:59:59)
//
// 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 AddTexUspeed = null;
private MaterialProperty AddTexVspeed = null;
//private MaterialProperty AddTexRo = null;
private MaterialProperty AddTexC = null;
private MaterialProperty AddTexCV = null;
private MaterialProperty AddTexColor = null;
private MaterialProperty AddTex_Sampler = null;
private MaterialProperty AddTexBlend = null;
private MaterialProperty AddTexAR = null;
private MaterialProperty IfAddTexAlpha = null;
private MaterialProperty IfAddTexColor = null;
private MaterialProperty AddTexUVS = null;
private MaterialProperty CAddTexUVT = null;
private MaterialProperty AddTexBlendModeVec4 = null;
private BLENDMODE AddTexBlendModeEnum = BLENDMODE.Alpha;
void OnGUIAddTex(Material material)
{
//AddTex下拉菜单
if (mainTex_Sampler.textureValue != null)
{
if (material.GetFloat("_IfAddTex") == 1)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_AddTex = Foldout(_AddTex, "多功能图(AddTexture)");
if (_AddTex)
{
EditorGUI.indentLevel++;
GUIAddTex(material);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
}
else
{
CloseAddTex(material);
}
}
}
void GUIAddTex(Material material)
{
m_MaterialEditor.TexturePropertySingleLine(new GUIContent("多功能图"), AddTex_Sampler, AddTexColor);
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 (AddTex_Sampler.textureValue != null)
{
//开启材质的_Add_Tex相关的KeyWord
material.EnableKeyword("_ADD_TEX");
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
_AddTexxx = Foldouts(_AddTexxx, "贴图设置(点击打开)");
if (_AddTexxx)
{
EditorGUI.indentLevel++;
// EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
m_MaterialEditor.ShaderProperty(AddTexC, "UVClamp");
m_MaterialEditor.ShaderProperty(AddTexCV, "");
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(AddTexAR, "使用R通道");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*不勾选附加图的A通道为它的透明通道勾选附加图的R通道为它的透明通道", style);
EditorGUILayout.EndVertical();
}
m_MaterialEditor.ShaderProperty(IfAddTexColor, "参与颜色通道运算");
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();
}
m_MaterialEditor.ShaderProperty(IfAddTexAlpha, "参与透明通道运算");
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();
}
GUILayout.Space(5);
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(AddTex_Sampler);
EditorGUILayout.EndVertical();
GUILayout.Space(5);
//m_MaterialEditor.ShaderProperty(AddTexBlendMode, "叠加模式");
DrawBlendModeEnum(ref AddTexBlendModeVec4, ref AddTexBlendModeEnum, "叠加模式");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*附加图和主贴图的叠加方式有lerp即alpha和add两种根据效果需求选择叠加模式", style);
EditorGUILayout.EndVertical();
}
GUILayout.Space(5);
if (material.GetVector("_AddTexBlendModeVec4") == new Vector4(1, 0, 0, 0))
{
m_MaterialEditor.ShaderProperty(AddTexBlend, "融合系数");
if (_tips == true)
{
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
style.fontSize = 10;
style.normal.textColor = new Color(0.5f, 0.5f, 0.5f);
GUILayout.Label("*主贴图与附加图的融合比例0为完全显示主贴图1为完全显示附加图", style);
EditorGUILayout.EndVertical();
}
material.SetFloat("_AddTexAlpha", 0);
GUILayout.Space(5);
}
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
m_MaterialEditor.ShaderProperty(AddTexUspeed, "U流动");
m_MaterialEditor.ShaderProperty(AddTexVspeed, "V流动");
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);
}
else
{
CloseAddTex(material);
}
}
void CloseAddTex(Material material)
{
material.DisableKeyword("_ADD_TEX");
material.SetVector("_AddTexBlendModeVec4", new Vector4(1, 0, 0, 0));
material.SetFloat("_IfAddTexAlpha", 0);
}
void FindPropertiesAddTex(MaterialProperty[] props)
{
//附加贴图
AddTex_Sampler = FindProperty("_AddTex", props);
AddTexBlend = FindProperty("_AddTexBlend", props);
AddTexC = FindProperty("_AddTexC", props);
AddTexCV = FindProperty("_AddTexCV", props);
AddTexColor = FindProperty("_AddTexColor", props);
//AddTexRo = FindProperty("_AddTexRo", props);
AddTexUspeed = FindProperty("_AddTexUspeed", props);
AddTexVspeed = FindProperty("_AddTexVspeed", props);
AddTexAR = ShaderGUI.FindProperty("_AddTexAR", props);
IfAddTexAlpha = ShaderGUI.FindProperty("_IfAddTexAlpha", props);
IfAddTexColor = ShaderGUI.FindProperty("_IfAddTexColor", props);
//AddTexUVS = ShaderGUI.FindProperty("_AddTexUVS", props);
CAddTexUVT = ShaderGUI.FindProperty("_CAddTexUVT", props);
AddTexBlendModeVec4 = ShaderGUI.FindProperty("_AddTexBlendModeVec4", props);
AddTexBlendModeEnum = ConvertBlendMode(AddTexBlendModeVec4);
}
BLENDMODE ConvertBlendMode(MaterialProperty blendModeVec4)
{
Vector4 vec4 = blendModeVec4.vectorValue;
if (vec4 == new Vector4(1, 0, 0, 0))
{
return BLENDMODE.Alpha;
}
else if (vec4 == new Vector4(0, 1, 0, 0))
{
return BLENDMODE.Add;
}
else if (vec4 == new Vector4(0, 0, 1, 0))
{
return BLENDMODE.Multiply;
}
return BLENDMODE.Alpha;
}
}
}