Unity快速打开所有选中物体的Emission

项目场景:

在Unity编辑器中快速打开所有选中物体的Emission,并将其MainTex赋予Emissionmap参数,以实现AR中让物体发光更亮又不至于突兀的作用,减少了手动开启关闭和调节颜色的过程。


实现脚本

using UnityEngine;
using UnityEditor;

public class ApplyAlbedoToEmission : EditorWindow
{
    [MenuItem("Tools/Apply Albedo to Emission Window")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow(typeof(ApplyAlbedoToEmission));
    }

    void OnGUI()
    {
        GUILayout.Label("Apply Albedo to Emission", EditorStyles.boldLabel);
        
        if (GUILayout.Button("EnableEmission"))
        {
            ApplyEmission(true);
        }

        if (GUILayout.Button("DisableEmission"))
        {
            ApplyEmission(false);
        }
    }

    static void ApplyEmission(bool enableEmission)
    {
        Undo.RecordObjects(Selection.gameObjects, "Apply Albedo to Emission");
        foreach (GameObject obj in Selection.gameObjects)
        {
            ApplyEmissionToMaterials(obj, enableEmission);
            ApplyEmissionToChildren(obj.transform, enableEmission);
        }
        AssetDatabase.SaveAssets();
    }

    static void ApplyEmissionToChildren(Transform parent, bool enableEmission)
    {
        foreach (Transform child in parent)
        {
            ApplyEmissionToMaterials(child.gameObject, enableEmission);
            ApplyEmissionToChildren(child, enableEmission);
        }
    }

    static void ApplyEmissionToMaterials(GameObject obj, bool enableEmission)
    {
        MeshRenderer meshRenderer = obj.GetComponent<MeshRenderer>();
        if (meshRenderer != null)
        {
            foreach (Material mat in meshRenderer.sharedMaterials)
            {
                if (mat != null)
                {
                    if (enableEmission)
                    {
                        mat.EnableKeyword("_EMISSION");
                        mat.globalIlluminationFlags = MaterialGlobalIlluminationFlags.RealtimeEmissive;
                        mat.SetColor("_EmissionColor",mat.color);
                        if (mat.HasProperty("_MainTex") && mat.mainTexture != null)
                        {
                            mat.SetTexture("_EmissionMap", mat.mainTexture);
                        }
                    }
                    else
                    {
                        mat.DisableKeyword("_EMISSION");
                        mat.SetTexture("_EmissionMap", null);
                        mat.SetColor("_EmissionColor", Color.black);
                    }
                    EditorUtility.SetDirty(mat);
                }
            }
        }
    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值