private void SavePreprocessShaders() { ShaderToolsSetting.GetInstance().PreprocessShadersSettings.Clear(); for (int iPreprocessShaders = 0; iPreprocessShaders < m_PreprocessShadersForGUIs.Count; iPreprocessShaders++) { PreprocessShadersForGUI iterPreprocessShadersForGUI = m_PreprocessShadersForGUIs[iPreprocessShaders]; if (iterPreprocessShadersForGUI.Script == null || iterPreprocessShadersForGUI.Setting == null) { continue; } try { iterPreprocessShadersForGUI.Setting.OnSaveByGUI(); PreprocessShadersSetting preprocessShadersSetting = new PreprocessShadersSetting(); preprocessShadersSetting.MonoScriptGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(iterPreprocessShadersForGUI.Script)); preprocessShadersSetting.MonoScriptTypeFullName = iterPreprocessShadersForGUI.Script.GetClass().FullName; preprocessShadersSetting.SettingJson = JsonUtility.ToJson(iterPreprocessShadersForGUI.Setting); ShaderToolsSetting.GetInstance().PreprocessShadersSettings.Add(preprocessShadersSetting); } catch (Exception e) { MDebug.LogWarning("Shader", $"保存Shader处理失败\n{e.ToString()}"); } } }
private void LoadPreprocessShaders() { m_PreprocessShadersForGUIs.Clear(); List <PreprocessShadersSetting> preprocessShadersSettings = ShaderToolsSetting.GetInstance().PreprocessShadersSettings; for (int iPreprocessShaders = 0; iPreprocessShaders < preprocessShadersSettings.Count; iPreprocessShaders++) { PreprocessShadersSetting iterPreprocessShadersSetting = preprocessShadersSettings[iPreprocessShaders]; try { PreprocessShadersForGUI preprocessShadersForGUI = new PreprocessShadersForGUI(); preprocessShadersForGUI.Script = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(iterPreprocessShadersSetting.MonoScriptGUID)) as MonoScript; if (preprocessShadersForGUI.Script == null) { continue; } Type baseType = preprocessShadersForGUI.Script.GetClass(); while (true) { baseType = baseType.BaseType; if (baseType.IsGenericType) { break; } } Type settingType = baseType.GenericTypeArguments[0]; preprocessShadersForGUI.Setting = JsonUtility.FromJson(iterPreprocessShadersSetting.SettingJson , settingType) as BasePreprocessShadersSetting; if (preprocessShadersForGUI.Setting == null) { continue; } preprocessShadersForGUI.Setting.OnLoadByGUI(); m_PreprocessShadersForGUIs.Add(preprocessShadersForGUI); } catch (Exception e) { MDebug.LogWarning("Shader", $"加载Shader处理失败\n{e.ToString()}"); } } }