unity编辑扩展-给物体环境光赋贴图

这个脚本在Unity中用于批量处理选中的游戏物体,为它们的材质开启自发光效果。通过检查每个物体及其子物体的材质,设置_EMISSION关键字,应用主纹理作为发射贴图,并设置适当的发射颜色和强度,从而实现光影效果。
摘要由CSDN通过智能技术生成

当物体有光影贴图时,给他自发光,且数量比较大

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class SetSelfLightmap : Editor
{

    //层级窗口(Hierarchy)右键菜单扩展
    [MenuItem("GameObject/SetMap", false, 10)]
    static void Init()
    {
        GameObject[] Prefabs = Selection.gameObjects;

        for (int i = 0; i < Prefabs.Length; i++)
        {
            Transform[] m_childTransformArray = Prefabs[i].GetComponentsInChildren<Transform>();
            if (m_childTransformArray.Length> 0)
            {
                for (int j = 0; j < m_childTransformArray.Length; j++)
                {
                    ChangeObjectMaterialEmission(m_childTransformArray[j].gameObject); 
                }
            }
            else
            {
                ChangeObjectMaterialEmission(Prefabs[i]);
            }
        }

    }
   static void ChangeObjectMaterialEmission( GameObject m_selectObject)
    {
        if (m_selectObject.GetComponent<MeshRenderer>())
        {
            Material[] selfMaterial = m_selectObject.GetComponent<MeshRenderer>().sharedMaterials;
            if (selfMaterial.Length > 1)
            {
                for (int k = 0; k < selfMaterial.Length; k++)
                {
                    Texture m_mainTex = selfMaterial[k].mainTexture;
                    Debug.Log(m_mainTex.name+"+++++");
                    selfMaterial[k].EnableKeyword("_EMISSION");
                    // selfMaterial[0].IsKeywordEnabled("_EMISSION") = true;
                  //  Debug.Log(selfMaterial[k].IsKeywordEnabled("_EMISSION"));
                    selfMaterial[k].SetTexture("_EmissionMap", m_mainTex);
                   selfMaterial[k].SetColor("_EmissionColor", Color.white * 0.75f);
                    selfMaterial[k].SetFloat("_EMISSION", 0.5f);
                    m_selectObject.GetComponent<MeshRenderer>().sharedMaterials[k] = selfMaterial[k];
                }
            }
            else
            {
                
                Texture m_mainTex = selfMaterial[0].mainTexture;
                selfMaterial[0].EnableKeyword("_EMISSION");
                // selfMaterial[0].IsKeywordEnabled("_EMISSION") = true;
                //Debug.Log(selfMaterial[0].IsKeywordEnabled("_EMISSION"));
                selfMaterial[0].SetTexture("_EmissionMap", m_mainTex);
                selfMaterial[0].SetColor("_EmissionColor", Color.white*0.75f);
                selfMaterial[0].SetFloat("_EMISSION", 0.5f);
                m_selectObject.GetComponent<MeshRenderer>().sharedMaterials[0] = selfMaterial[0];
            }
        }

    }
    override public void OnInspectorGUI()
    {
        //更新保存数据
        serializedObject.Update();
        //刷新修改的值
        serializedObject.ApplyModifiedProperties();
    }



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值