对多种材质应用不同的纹理(Unity3D)

Apply different textures to multiple materials (Unity3D)

我在Ressorce文件夹中有一个名为"Walls"的文件夹,其中包含多个纹理,调用"wallRoi[1-26]"。现在我想通过 C# 脚本将它们应用到我在 Unity 中的模型。 解释我的代码:该模型对整个墙进行了多个分段,每个分段都有一个标签("Wall[1-26]")。整面墙的标签是"Wall"。现在,我试图遍历整个墙,并将文件夹中的不同纹理应用于墙的每个分段。我的代码不起作用,有什么目的吗?谢谢!

private UnityEngine.Object[] walltextures;

    void mapTexturesOverWalls() {
        walltextures = Resources.LoadAll ("Walls", typeof(Texture2D));

        Texture2D[] wallTex = (Texture2D)walltextures [walltextures.Length];

        GameObject walls = GameObject.FindGameObjectWithTag ("Wall");
        Renderer[] renders = walls.GetComponentsInChildren<Renderer> ();

        for (int i = 0; i < wallTex.Length; i++) {
            foreach (Renderer r in renders) {
                r.material.mainTexture = wallTex[i];
                UnityEngine.Debug.Log (wallTex + "");
            }
        }
    }

创建一个名为 TexturesOverWall.cs 的新脚本,然后复制并粘贴以下代码。您需要做的就是使用与要应用的纹理相同的名称命名每个墙分割游戏对象。希望这对你有帮助:)

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

public class TexturesOverWall : MonoBehaviour
{

private Texture2D[] walltextures;

void Awake ()
{
    mapTexturesOverWalls ();
}

void mapTexturesOverWalls ()
{
    walltextures = Resources.LoadAll<Texture2D> ("Walls");

    GameObject walls = GameObject.FindGameObjectWithTag ("Wall");
    Renderer[] renders = walls.GetComponentsInChildren<Renderer> ();

    foreach (Renderer r in renders) {
        // all you need to do is name each wall segmentation gameobject with the same name of the texture to apply
        r.material.mainTexture = getTextureByName(r.gameObject.name);
    }
}

Texture2D getTextureByName (string name)
{
    foreach (var tex in walltextures) {
        if (tex.name == name)
            return tex;
    }

    return null;
    }
}