Files
Cielonos/Assets/Shaders/PandaVFX/Editor/PandavfxGUI.AddTex.cs
SoulliesOfficial f7af60351b 阶段性完成
2025-12-08 05:27:53 -05:00

253 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// -----------------------------------------------------------------------
// 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;
}
}
}