------------------------------------------------ --作者: gzg --日期: 2021-05-21 --文件: FGameObjectShaderUtils.lua --模块: FGameObjectShaderUtils --描述: 模型中需要替换Shader的逻辑代码 ------------------------------------------------ --引用 local ShaderManager = CS.Thousandto.Core.Asset.ShaderManager --在类中的定义字段,不能赋值为nil,需要赋值为一个值.默认可以为0 local FGameObjectShaderUtils = {} --切换Shader的代码,返回值为Shader类型. --sh:Shader --modelType:ModelTypeCode --imodelid:integer function FGameObjectShaderUtils.ShaderSwitch(sh,modeltype,imodelid) Debug.Log("FGameObjectShaderUtils.ShaderSwitch:" .. tostring(modeltype) .. ":::" .. tostring(imodelid) ); if modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Wing) then return FGameObjectShaderUtils.ProcessWing(sh,imodelid); elseif modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Object) then return FGameObjectShaderUtils.ProcessObject(sh,imodelid); elseif modeltype == UnityUtils.GetObjct2Int(ModelTypeCode.Player) then return FGameObjectShaderUtils.ProcessPlayer(sh,imodelid); end return sh; end function FGameObjectShaderUtils.ProcessWing(sh,imodelid) local _sn = sh.name; if imodelid % 100 < 50 then _sn = _sn + "_AlphaTest" end local _rgbSh = FGameObjectShaderUtils.ShaderUseRGB(_sn,imodelid); if _rgbSh then return _rgbSh; elseif sh.name ~= _sn then --如果两个名字不同,那么就使用新的Shader local _si = ShaderManager.SharedInstance:GetShaderDefine(_sn); if _si then return _si.RealShader; end end return sh; end function FGameObjectShaderUtils.ProcessObject(sh,imodelid) if ShaderManager.IsEntityUseRGB and sh.name == "Ares/EntityState/Grown" then local _newSh = FGameObjectShaderUtils.ShaderUseRGB("Ares/EntityState/Grown"); if _newSh then return _newSh; end end return sh; end function FGameObjectShaderUtils.ProcessPlayer(sh,imodelid) local _sn = sh.name; if imodelid % 100 > 70 then _sn = _sn + "_AlphaBlend" end local _rgbSh = FGameObjectShaderUtils.ShaderUseRGB(_sn,imodelid); if _rgbSh then return _rgbSh; elseif sh.name ~= _sn then --如果两个名字不同,那么就使用新的Shader local _si = ShaderManager.SharedInstance:GetShaderDefine(_sn); if _si then return _si.RealShader; end end return sh; end function FGameObjectShaderUtils.ShaderUseRGB(strShName,imodelid) if ShaderManager.IsEntityUseRGB then local _rgb = strShName + "_RGB"; local _rgbSi = ShaderManager.SharedInstance.GetShaderDefine(_rgb); if _rgbSi then return _rgbSi.RealShader; end end return nil; end return FGameObjectShaderUtils