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
谢谢。
【问题讨论】:
你说的“网格”是什么对象类型?你的意思是GameObject
s 是另一个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 简单介绍与入门