如何创建一个代码,将自动将着色器应用于模型中对象的材质?

时间:2016-07-25 16:02:37

标签: c# unity3d

我在c#中有一个代码,它读取标记对象的材质,并根据我想要使用的着色器渲染它。我想知道是否有更简单的方法。在模型中有很多具有大量材料的物体。创建这些许多脚本然后在uniy3D上运行它们非常耗时。我想创建一个脚本,该脚本可以自动查找模型中对象的材质并将着色器应用于它们。

1 个答案:

答案 0 :(得分:0)

将它放在父GameObject上,这应该有效,它会找到游戏对象子节点中的所有Renderer,然后分配着色器。

using UnityEngine;
using System.Collections;

public class AssignShadersToChildren : MonoBehaviour 
{
    public Shader shader; // This should hold the Shader you want to use

    void Start() 
    {
        // We create a list that will hold all the renderers so we can then assign the shader
        List<Renderer> renderers = new List<Renderer>();
        renderers = GetComponentsInChildren<Renderer>();

        // For every Renderer in the list assign the materials shader to the shader
        foreach (Renderer r in renderers) {
            r.material.shader = shader;
        }
    }
}
  

注意:这是在没有编译器的情况下编写的,因此有可能无法运行。

如果这回答了你的问题,请务必接受这个答案。