Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                        }
                    }
                }
            }
        }