【问题标题】:Apply different textures to multiple materials (Unity3D)将不同的纹理应用于多种材质(Unity3D)
【发布时间】:2017-12-09 06:22:08
【问题描述】:

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

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 + "");
            }
        }
    }

【问题讨论】:

    标签: c# unity3d textures texture-mapping


    【解决方案1】:

    创建一个名为 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;
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2013-08-07
    • 2018-02-28
    • 1970-01-01
    • 2014-10-04
    • 2023-03-24
    • 2023-04-04
    • 2021-12-17
    相关资源
    最近更新 更多