Files
Main/Assets/Code/Logic/_Required/FGameObject/FSkin/FGOShaderSwitcher.cs

72 lines
2.2 KiB
C#
Raw Normal View History

2025-01-25 04:38:09 +08:00
using Thousandto.Code.Center;
using Thousandto.Core.Asset;
using UnityEngine;
namespace Thousandto.Code.Logic
{
/// <summary>
/// FGameObject的Shader的处理,用于Shader的切换处理.
/// </summary>
public class FGOShaderSwitcher
{
/// <summary>
/// 处理切换接口
/// </summary>
/// <param name="sh"></param>
/// <param name="code"></param>
/// <param name="id"></param>
/// <returns></returns>
public static Shader Process(Shader sh,ModelTypeCode code,int id)
{
switch (code)
{
case ModelTypeCode.Wing:
return ProcessWing(sh, id);
case ModelTypeCode.Object:
return ProcessObject(sh, id);
}
return sh;
}
//处理翅膀的处理
private static Shader ProcessWing(Shader sh, int imodelid)
{
var _sn = sh.name;
if (imodelid % 100 < 50) {
_sn = _sn + "_AlphaTest";
}
var _rgbSh = ShaderUseRGB(_sn);
if (_rgbSh != null)
return _rgbSh;
else if(sh.name != _sn)
{
//如果两个名字不同,那么就使用新的Shader
var _si = ShaderManager.SharedInstance.GetShaderDefine(_sn);
if (_si != null) return _si.RealShader;
}
return sh;
}
//处理采集的shader
private static Shader ProcessObject(Shader sh, int imodelid)
{
if (ShaderManager.IsEntityUseRGB && sh.name == "Ares/EntityState/Grown") {
var _newSh = ShaderUseRGB("Ares/EntityState/Grown");
if (_newSh!=null) return _newSh;
}
return sh;
}
//Shader使用RGB
private static Shader ShaderUseRGB(string strShName) {
if (ShaderManager.IsEntityUseRGB) {
var _rgb = strShName + "_RGB";
var _rgbSi = ShaderManager.SharedInstance.GetShaderDefine(_rgb);
if (_rgbSi!=null) return _rgbSi.RealShader;
}
return null;
}
}
}