• unity 改变模型及其子物体的Shader和透明度


    目录

    前言:

    记录一下方便使用修改

    一、改变透明度(包括所以子物体)

    二、还原

    总结:


    前言:

    记录一下方便使用修改

    unity 代码替换材质贴图_unity代码替换材质-CSDN博客

    一、改变透明度(包括所以子物体)

    使用GetComponentsInChildren()遍历其 子物体的Renderer

    1. /// <summary>
    2. /// 改变透明度
    3. /// </summary>
    4. /// <param name="data"></param>
    5. public virtual void OnYangFangZhiWu(GameObject Obj, BaseEventData data = null)
    6. {
    7. Debug.Log("name=" + Obj.name);
    8. Renderer[] renderers = ZhiWu_Parent.transform.Find(Obj.name).GetComponentsInChildren<Renderer>();
    9. foreach (Renderer renderer in renderers)
    10. {
    11. Material[] materials = renderer.materials;
    12. foreach (Material material in materials)
    13. {
    14. // 处理每个材质球
    15. Debug.Log(material.name);
    16. if (Obj.name == "牛鞭草")
    17. {
    18. renderer.material = material_TouMing;
    19. }
    20. else
    21. {
    22. // 获取新的Shader资源
    23. Shader newShader = Shader.Find("Standard");
    24. // 将新的Shader赋值给材质的shader属性
    25. material.shader = newShader;
    26. MaterialModify.SetMaterialRenderingMode(material, MaterialModify.RenderingMode.Fade);
    27. material.color = new Color(material.color.r, material.color.g, material.color.b, 0.2f);
    28. }
    29. }
    30. }
    31. }

    二、还原

    同样的方法逻辑去还原即可 

    1. ///还原
    2. public void SetTree8_00()
    3. {
    4. for (int i = 0; i < ZhiWu_Parent.transform.childCount; i++)
    5. {
    6. int x = i;
    7. Renderer[] renderers = ZhiWu_Parent.transform.GetChild(x).GetComponentsInChildren<Renderer>();
    8. foreach (Renderer renderer in renderers)
    9. {
    10. Material[] materials = renderer.materials;
    11. foreach (Material material in materials)
    12. {
    13. // 处理每个材质球
    14. Debug.Log(material.name);
    15. if (ZhiWu_Parent.transform.GetChild(x).gameObject.name == "牛鞭草")
    16. {
    17. renderer.material = material_YuanBen;
    18. }
    19. else
    20. {
    21. // 获取新的Shader资源
    22. //Shader newShader = Shader.Find("Nature/SpeedTree8");
    23. // 将新的Shader赋值给材质的shader属性
    24. material.shader = Shader.Find("Nature/SpeedTree8");
    25. material.color = new Color(material.color.r, material.color.g, material.color.b, 1f);
    26. // 将修改后的材质赋值给模型的渲染器组件
    27. // renderer.material = material;
    28. }
    29. }
    30. }
    31. }
    32. }

    三、这是更换材质球(包括所以子物体):

    1. public Material material_;
    2. public List<Material> materials_List = new List<Material>();
    3. /// <summary>
    4. /// 改变材质球
    5. /// </summary>
    6. /// <param name="data"></param>
    7. public virtual void SetMaterials()
    8. {
    9. Renderer[] renderers = this.transform.GetComponentsInChildren<Renderer>();
    10. foreach (Renderer renderer in renderers)
    11. {
    12. Material[] materials = renderer.materials;
    13. for (int i = 0; i < materials.Length; i++)
    14. {
    15. materials_List.Add(materials[i]);
    16. renderer.material = material_;
    17. }
    18. }
    19. }
    20. ///还原
    21. public void RestoreMaterials()
    22. {
    23. Renderer[] renderers = this.transform.GetComponentsInChildren<Renderer>();
    24. foreach (Renderer renderer in renderers)
    25. {
    26. Material[] materials = renderer.materials;
    27. for (int i = 0; i < materials.Length; i++)
    28. {
    29. renderer.material = materials_List[i];
    30. }
    31. }
    32. }

    总结:

    好记性不如烂笔头

  • 相关阅读:
    8.13
    【k8s】(二)kubernetes1.29.4离线部署之-镜像文件准备
    编译+链接和预处理
    【软件设计师-下午题总结】
    人工智能:CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的知识梳理
    (3) OpenCV图像处理kNN近邻算法-识别摄像头数字
    信息学奥赛一本通2062:【例1.3】电影票
    无痕视频去水印方法分享-这些软件你值得拥有
    opencv 训练
    10.导弹拦截
  • 原文地址:https://blog.csdn.net/qq_37524903/article/details/133854759