最近為美術編寫乙個unity編輯器的擴充套件,主要為了減輕美術在修改預製物件時的機械化操作的繁瑣和出錯。具體實現的幾個功能:
1、刪除指定元件;
2、複製、貼上指定的元件;
3、重新關聯新的屬性;
4、重新儲存預製物件;
一、刪除指定型別的元件
publicstatic
void
removecomponenthandler(gameobject gameobject, type componenttype)
}
}
二、複製元件(這裡實現的是一次僅複製乙個某型別的元件)
publicstatic
void
copycomponenthandler(type componenttype, gameobject fromgameobject, gameobject togameobject)
}//進行貼上操作
//unityeditorinternal.componentutility.copycomponent(needcopycomponent);
unityeditorinternal.componentutility.pastecomponentasnew(togameobject);
}
三、關聯新屬性
就是遍歷指定的gameobject,然後找到它附加的元件,重新設定其值即可。
四、替換預製物件
gameobject activegameobject =selection.activegameobject;if (activegameobject != null
)
//查詢id
string strid = new regex(@"
h$").replace(activegameobject.name, ""
);
//第六步 儲存預製物件
string strcurrselectprefabname =activegameobject.name;
if (strprefabpath.endswith("
.prefab"))
debug.log(
"預製物件
" + strcurrselectprefabname + "
修改完成。");
}else
}
最核心的幾行**:
1、例項化乙個新的gameobject;
2、替換預製物件;
3、銷毀老的gameobject;
4、重新整理資源;
對於美術的同事來講,最複雜、麻煩的莫過於重新關聯屬性,特別是骨骼動畫。因為之前沒有統一的規範,所以關聯哪一段動畫實際上是需要一層一層找的,我看著他們找都覺得累,怎麼辦呢?我想到乙個辦法,就是通過name查詢新的元件,然後重新賦值關聯。通過name查詢某個gameobject下的子節點(前提條件是該name唯一)
publicstatic gameobject findchildgameobject(gameobject parent, string
childname)
if (parent.transform.childcount < 1
)
gameobject obj = null
;
for (int i = 0; i < parent.transform.childcount; i++)
}return
obj;
}
上面基本上實現了,元件幾個常用的方法:
1、新增元件(先複製後貼上);
2、刪除元件;
3、通過名字查詢子元件;
4、更新預製物件;
Unity外掛程式擴充套件中元件常用的幾個方法
最近為美術編寫乙個unity編輯器的擴充套件,主要為了減輕美術在修改預製物件時的機械化操作的繁瑣和出錯。具體實現的幾個功能 1 刪除指定元件 2 複製 貼上指定的元件 3 重新關聯新的屬性 4 重新儲存預製物件 一 刪除指定型別的元件 public static void removecompone...
Unity外掛程式擴充套件中元件常用的幾個方法
最近為美術編寫乙個unity編輯器的擴充套件,主要為了減輕美術在修改預製物件時的機械化操作的繁瑣和出錯。具體實現的幾個功能 1 刪除指定元件 2 複製 貼上指定的元件 3 重新關聯新的屬性 4 重新儲存預製物件 一 刪除指定型別的元件 public static void removecompone...
為Unity元件編寫擴充套件
這幾行 寫到乙個editor檔案中,就可以在滑鼠選中某個遊戲物件時,列印出它的路徑,let me show you the code using unityengine using unityeditor using system.collections public class toolkit e...