c# - Inspector 中的 Unity3d 二维数组

标签 c# arrays unity3d

我有一个对象,例如有 5 个网格,我想在运行时更改颜色。但是每个网格都有不同的颜色可以改变。例如网格1可以更改为蓝色、红色和橙色,网格2可以更改为橙色、黄色、绿色、紫色和白色。

我想要一个 C# 脚本,其中我有一个包含所有 5 个网格的数组。对于每个数组,我希望在检查器中显示另一个数组,我可以在其中输入不同的颜色。 如果网格数始终为 5,这没问题。但我希望它具有灵 active 。例如,另一个对象只有 3 个网格,而我只需要 3 个颜色阵列而不是 5 个。

我从未使用过编辑器脚本,但也许有一个简单的解决方法?

我正在使用 Unity 5.3

谢谢。

最佳答案

public class Test: MonoBehaviour
{
    public Models [] models;
    private int index = 0;
    [SerializeField] private MeshFilter meshFilter = null;
    [SerializeField] private Renderer rend = null;
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            if(++index == models.Length)index = 0;
            meshFilter.mesh = models[index].mesh;
            int currIndex = models[index].currentIndex;
            rend.material = models[index].materials[currIndex];
        }
        if(Input.GetKeyDown(KeyCode.A))
        {
            if(++models[index].currentIndex == models[index].materials.Length)models[index].currentIndex = 0;
            int currIndex = models[index].currentIndex;
            rend.material = models[index].materials[currIndex];
        }
    }   
}
[System.Serializable]
public class Models{
    public Mesh mesh;
    public int currentIndex;
    public Material[]materials;
}

这将在您的检查器中显示模型数组。你可以给它一个尺寸,然后每个元素都会打开一个网格槽和一系列 Material 。给它一个大小,你就可以开始拖动 Material 了。

我建议在数组中添加 2 个项目,然后添加两个网格(Unity 有一些默认的网格,如球体和立方体)。然后创建一些颜色的基本 Material ,并将它们添加到每个对象的 Material 数组中。

然后您可以运行并按 Space 更改网格,按 A 更改颜色。之后你只需要使用你自己的。

关于c# - Inspector 中的 Unity3d 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680566/

相关文章:

c# - 找出 C# 中的对象使用了多少内存?

c# - 软件包需要 NuGet 客户端版本...或更高版本

c# - Unity3d 和 UdpClient

java - Unity3D - 使用 Gradle 构建 Android AppBundle 失败

c# - hololens 构建中包含错误的 Microsoft.VCLibs 版本

c# - ZPL:二进制 B64 和压缩 Z64 编码

c# - 如何通过反射调用非静态方法

java - 将字符串转换为 UTF-8 字节数组在 Java 中返回负值

javascript - 二维数组未排序

javascript - 迭代包含两个元素的数组会产生三个对象