Inspector 中的 Unity3d 排序的 2D 数组

Posted

技术标签:

【中文标题】Inspector 中的 Unity3d 排序的 2D 数组【英文标题】:Unity3d sort of 2D array in Inspector 【发布时间】:2016-01-08 15:32:37 【问题描述】:

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

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

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

我正在使用 Unity 5.3

谢谢。

【问题讨论】:

你说的“网格”是什么对象类型?你的意思是GameObjects 是另一个GameObject 的孩子还是你在谈论UnityEngine.Mesh 对象?你能举一个例子对象层次结构吗?据我了解,您基本上想要一个具有UnityEngine.Color[] 字段的脚本,该字段具有“网格”数量的长度,然后根据该颜色为每个网格着色(通过着色器?material.color?) 我的意思是,我将有一个带有多个子对象的游戏对象。而且我想将其中一些子对象放入一个数组中,而不是对于该数组中的每个元素,我都会得到一个带有颜色的新数组。这些颜色正在通过 material.color 为网格/对象着色。所以是的,就像你说的我猜的一样。 【参考方案1】:
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;

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

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

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

【讨论】:

非常感谢,这几乎正是我所需要的。我刚改成public Models [] models; private int index = 0; [System.Serializable] public class Models public MeshRenderer mesh; public Color[] color; 如果您打算更换颜色,我建议您更换不同颜色的材料。我在某处读到统一在访问颜色时创建了一种新材料。我同意有点奇怪。 嗯,我读到“您只会获得一次新的材质实例……第一次更改任何材质属性时”,所以我想对我来说不是问题。不过谢谢你的建议。

以上是关于Inspector 中的 Unity3d 排序的 2D 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Unity3d 中,如何将浮动窗口(例如光照贴图)添加到现有的一组选项卡(例如:Inspector)?

unity3d里面怎么让自定义的类变量显示在inspector中

Unity3D游戏物体操作 ② ( 3D 原生物体 | 立方体 | 球体 | 平面 | 物体移动 | 沿坐标轴移动 | 沿坐标平面移动 | 在 Inspector 检查器窗口设置坐标属性 )

Unity3D Odin Inspector 简单介绍与入门

Unity3D Odin Inspector 简单介绍与入门

Unity3D Odin Inspector Attribute回调的实现原理