public void Replace(Material mfxMaterialTemplate) { IsMaterialsReplaced = true; _rendererToOriginalMaterialsMap.Clear(); _mfxMaterials.Clear(); foreach (var renderer in _renderers) { var rendererSharedMaterials = renderer.materials; _rendererToOriginalMaterialsMap[renderer] = rendererSharedMaterials; var newMaterials = MfxMaterialUtil.ReplaceMaterialsToMfx(mfxMaterialTemplate, rendererSharedMaterials, _determineWorkflow, _mfxShaderType, false); renderer.materials = newMaterials.ToArray(); _mfxMaterials.AddRange(newMaterials); } }
private static void ShowReplaceMaterialsUi(MfxController mfxController) { EditorGUILayout.Separator(); EditorGUILayout.LabelField(MfxEditorLocalization.ReplaceMaterialParamsLabel, EditorStyles.boldLabel); mfxController.DetermineWorkflowAutomatically = EditorGUILayout.Toggle(MfxEditorLocalization.DetermineWorkflowAutomaticallyLabel, mfxController.DetermineWorkflowAutomatically); if (!mfxController.DetermineWorkflowAutomatically) { mfxController.MfxShaderType = (MfxShaderType)EditorGUILayout.EnumPopup(MfxEditorLocalization.ShaderTypeLabel, mfxController.MfxShaderType); } mfxController.MfxMaterial = (Material)EditorGUILayout.ObjectField(MfxEditorLocalization.MaterialLabel, mfxController.MfxMaterial, typeof(Material), true); mfxController.ReplaceMaterial = EditorGUILayout.Toggle(MfxEditorLocalization.ReplaceMaterialLabel, mfxController.ReplaceMaterial); //if (mfxController.ReplaceMaterial) { mfxController.ReplaceMaterialMode = EditorGUILayout.Toggle(MfxEditorLocalization.ReplaceMaterialInEditorLabel, mfxController.ReplaceMaterialMode); if (mfxController.ReplaceMaterialMode) { var materialsCount = MfxMaterialUtil.GetMaterialsCount(mfxController.TargetObject); EditorGUILayout.LabelField(MfxEditorLocalization.MaterialsCountLabel + materialsCount); if (GUILayout.Button(MfxEditorLocalization.ReplaceMaterialButton)) { if (mfxController.MfxMaterial == null) { Debug.LogWarning("template mfx materials is not selected"); } else { MfxMaterialUtil.ReplaceRenderersMaterials(mfxController.MfxMaterial, mfxController.Target, mfxController.DetermineWorkflowAutomatically, mfxController.MfxShaderType, true); } } } } }