既然你已經添加的標籤Unityscript我會假設你想能夠改變腳本內的子網格。
分配作爲參數
第一個解決辦法是有一個公共的參數添加到您的腳本,將網格陣列。然後通過檢查器手動將每個子網格分配給數組。現在您可以訪問每個網格的材質並更改其顏色。
public class MyScript : MonoBehaviour {
public Mesh[] submeshes;
// Update is called once per frame
void Update() {
for (int i = 0; submeshes[i]; i++) {
// Return the first material of the mesh renderer, use .materials if multiple Material are applied
submeshes[i].renderer.material.color = Color.red;
}
}
}
請注意,我用Mesh
類型爲我的數組,但你可以直接使用Material
,如果你只是想改變顏色。
此外,如果子網具有完全相同的材質,它將更改所有子網格的顏色,而不僅僅是一個。每個網格需要一種材料。 雖然如果您的子網數量動態變化,此解決方案不可行,但此解決方案非常簡單且直接。
使用兒童
而是手動分配每子網,則可以通過動態訪問兒童
public class MyScript : MonoBehaviour {
public Mesh myObject;
// Update is called once per frame
void Update() {
Material[] array = myObject.GetComponentsInChildren<Material>();
for (int i = 0; array[i]; i++) {
array[i].color = Color.red;
}
}
}
改變顏色該解決方案可以讓你有一個分配給你的子網N材料。 這裏是GetComponentsInChildren
文檔編輯
簡短的回答
如果你想有一個明確的答案你的情況,這取決於分配給您的蒙皮網格渲染器的材料和着色器,因爲他們可以覆蓋或改變你的孩子的材料。如果沒有,下面的代碼應該可以工作。
SkinnedMeshRenderer smr = gameobject1.GetComponent<SkinnedMeshRenderer>();
Mesh main_mesh = smr.sharedMesh;
Mesh[] submeshes = main_mesh.GetComponentsInChildren<Mesh>();
for (int i = 0; submeshes[i]; i++) {
// If your submesh already have a material, remove the first line below !
submeshes[i].renderer.material = new Material(Shader.Find("Diffuse"));
submeshes[i].renderer.material.color = Color.red;
}
此解決方案爲每個子網格創建一個新的材質,這是非常殘酷的。
在檢查員中,應該爲每個子網格指定一種材質,然後始終使用具有不同顏色的相同材質。
如果當你想改變一個特定的網格的顏色它不起作用
,該網需要有自己的材料。網格的顏色將取決於這些材質以及它的屬性(着色器,紋理,顏色)。
使用蒙皮網格渲染器,通常使用具有紋理的漫反射材質將顏色應用於一個複雜網格。在某些情況下,這個網格將顏色應用到它的兒童身上。
使用Skinned Mesh Renderer時,通常使用UV紋理。這個特殊的紋理是基於你的3D對象創建的,並用於在其上應用多種顏色(有時候也是兒童)。這裏有一個簡單的例子UV texture,這裏是一個more complex example。
請注意,作爲網格渲染器,蒙皮網格渲染器可以具有多種材質,這會使情況更復雜,但原理保持不變。
SkinnedMeshRenderer smr = gameobject1.GetComponent<SkinnedMeshRenderer>();
Mesh main_mesh = smr.sharedMesh;
與您的代碼,如果main_mesh使用UV紋理,有兩種解決方法
- 刪除紋理,然後應用色彩到它的孩子
- 創建該應用顏色作爲你一個具體的UV紋理想。
@shepherd我會相應地修改我的答案=)。 –
非常感謝你:),你可以請檢查我的問題在這裏以及http://stackoverflow.com/questions/30588863/inspector-is-disabled-in-unity? – Tak