2016-01-08 189 views
3

我有一個對象,例如有5個網格,我想在運行時改變顏色。但每個網格都有不同的顏色可以改變。例如,網格1可以更改爲藍色,紅色和橙色,網格2可以更改爲橙色,黃色,綠色,紫色和白色。Inspector中的Unity3d類二維數組

我想有一個c#腳本,我有一個數組與所有5網格。對於每個陣列,我希望在檢查器中出現另一個陣列,我可以在其中輸入不同的顏色。 這是沒有問題的,如果網格數總是5.但我希望它是靈活的。例如,另一個對象只有3個網格,而我只需要3個顏色數組而不是5個。

我從來沒有使用過編輯器腳本,但也許有一個簡單的解決方法?

我正在使用Unity 5.3

謝謝。

+0

你說的「網格」是什麼類型的對象?你的意思是'GameObject'是哪個孩子的另一個'GameObject'或者你在談論'UnityEngine.Mesh'對象?你能給一個示例對象層次結構嗎?據我所知,你基本上需要一個具有「網格」數量長度的UnityEngine.Color []'字段的腳本,然後根據該顏色爲每個網格着色(通過Shader?'material.color' ?) –

+0

我的意思是,我將有一個有多個子對象的gameobject。我想將這些子對象放到一個數組中,而不是爲那個數組中的每個元素,我會得到一個帶有顏色的新數組。這些顏色正在爲網格物體槽着色。所以,是的,就像你說的我猜。 – Jenny

回答

0
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; 
} 

這將在您的檢查器中顯示Models數組。你可以給它一個尺寸,然後每個元素打開一個網格槽和一個材料陣列。給它一個大小,你可以開始拖動材料。

我會建議在數組中添加2個項目,然後添加兩個網格(Unity有一些默認的像球體和立方體)。然後創建一些基本的顏色材料並將它們添加到每個對象的材質數組中。

然後,您可以運行並按空格更改網格,然後按A更改顏色。之後你只需要使用你自己的。

+0

非常感謝,這幾乎就是我所需要的。我只是將它改爲 \t'public models [] models; \t private int index = 0; } [System.Serializable] public class Models { \t public MeshRenderer mesh; \t public color [] color; }' – Jenny

+0

如果您計劃切換顏色,我會建議切換不同顏色的材質。我在某處閱讀時,團結創造一個新的材料,當訪問顏色。有點奇怪,我同意。 – Everts

+0

嗯,我讀過「你只會得到一個新的材料實例......第一次你改變任何材料屬性」,所以我認爲對我來說不是問題。但感謝您的建議。 – Jenny