Unity缂栬緫鍣ㄥ紑鍙戯細瀹樻柟椋庢牸鐨凾able鎺т欢
Table鎺т欢鑳藉闈炲父鐩磋鍦板睍鐜版壒閲忕殑鏁版嵁銆傚湪Unity涓紝Light Explorer灏辨槸涓涓吀鍨嬬殑鍏锋湁Table鎺т欢鐨勭獥鍙c
濡備笂鍥炬墍绀猴紝绐楀彛涓婃柟鏄4涓猅abButton銆備笅闈㈠氨鏄竴涓猅able銆傝繖涓猅able鍔熻兘闈炲父寮哄ぇ锛屾湁鍒楄〃锛屾帓搴忥紝绛涢夛紝瀹炴椂鍚屾鏁版嵁鏇存柊锛屽疄鏃跺悓姝ラ夋嫨绛夊姛鑳姐
鍦║nity椤圭洰寮鍙戜腑锛屼篃甯稿父闇瑕佸仛杩欑Table鏁版嵁鐨勫睍绀烘垨鑰呯被浼肩殑鍔熻兘锛屾瘮濡傜畝鍗曠殑涓涓渶姹傦紝鎵惧嚭褰撳墠鍦烘櫙涓墍鏈夌殑Camra锛屽苟鏄剧ず瀹冪殑鏌愪簺灞炴с傜敤Table鎺т欢灞曠ず濡備笅
杩欎釜鏄竴涓畝鍗曠殑绐楀彛锛屾弧瓒充笂杩扮殑闇姹傘傝繖绉嶅畼鏂归鏍肩殑Table绐楀彛涓嶄粎鍦ㄥ姛鑳戒笂婊¤冻浜嗛渶姹傦紝鍦ㄥ瑙備笂闈炲父OK銆
鍦ㄥ疄鐜颁笂锛岃繖绉嶆帶浠讹紝鍏跺疄鏄疷nity鎻愪緵鐨凾reeView鎺т欢鐨勬墿灞曘侺ight Explorer涓娇鐢ㄥ埌浜嗙户鎵夸簬TreeView鐨凷erializedPropertyTreeView銆備絾鏄潪甯搁仐鎲剧殑鏄紝鐩墠SerializedPropertyTreeView鏄痠nternal鐨刢lass锛屾墍浠ユ垜浠棤娉曢氳繃缁ф壙鏉ュ疄鐜般傛煡鐪嬪畠鐨勬簮鐮佸彲浠ョ湅鍒帮紝鏈夐儴鍒嗕唬鐮佷緷璧栦簡鍐呴儴鐨勭被锛屾垨鑰呰繖涔熸槸瀹樻柟鏃犳硶鍏紑杩欎釜SerializedPropertyTreeView鐨勫師鍥犮備絾鏄紝濡傛灉鍘婚櫎鎺変竴浜涙棤鍏崇揣瑕佺殑鍔熻兘锛屼簨瀹炰笂鏄畬鍏ㄥ彲浠ヨ劚鑰﹁岀嫭绔嬪嚭鏉ャ傛秹鍙婂埌SerializedPropertyTable锛孲erializedPropertyTreeView锛孲erializedPropertyFilters浠ュ強SerializedPropertyDataStore杩4涓被銆
鑰屽湪浣跨敤鏃讹紝涔熻緝涓虹畝鍗曪紝鎻愪緵涓涓悳绱㈡柟娉曪紝鍒椾俊鎭嵆鍙傛瘮濡傚畬鎴愪笂闈㈡彁鍒扮殑鏄剧ず鐩告満鐨勯渶姹傦紝鍙互鐢ㄤ互涓嬩唬鐮侊細
棣栧厛瀹氫箟涓涓獥鍙o紝瀹炵幇浠庤彍鍗曟墦寮
public class ComponentFindWindow : EditorWindow
{
[MenuItem("Tools/Windows/ComponentFindWindow")]
public static void Open()
{
GetWindow<ComponentFindWindow>();
}
}
鍦–omponentFindWindow涓鍔犱竴涓猄erializedPropertyTable澹版槑锛屽苟杩涜缁樺埗
private SerializedPropertyTable m_table;
public void OnGUI()
{
using (new EditorGUILayout.VerticalScope())
{
if (m_table != null)
{
m_table.OnGUI();
}
}
}
褰撶劧锛岃繖鏃跺欎粈涔堥兘涓嶄細鍙戠敓锛屾垜浠繕瑕佸m_table杩涜瀹炰緥鍖
public void OnEnable()
{
m_table = new SerializedPropertyTable("Table", FindObjects, CreateCameraColumn);
}
SerializedPropertyTable鐨勬瀯閫犲嚱鏁版湁3涓弬鏁
- 绗竴涓槸鍞竴鐨勬爣绛俱傜敤浜庤〃绀鸿繖涓猅reeView搴忓垪鍙蜂俊鎭殑ID
- 绗簩涓槸鏄剧ず鍐呭鐨勬悳绱㈠嚱鏁般備緥濡傛垜浠鏄剧ず鎵鏈夌殑Camera锛屽氨瑕佹彁渚涙壘鍒拌繖涓狢amera鐨勬柟娉
- 绗笁涓槸鍒椾俊鎭傚寘鎷垪鍚嶏紝闀垮害锛屽彲鎷変几鐨勬渶澶ф渶灏忛暱搴︼紝瀵归綈鏂瑰紡锛屾槸鍚﹀彲鎺掑簭锛屽垪鐨勭粯鍒舵柟娉曪紝鎺掑簭鏂规硶锛岀瓫閫夋柟娉曠瓑绛
杩欓噷FindObjects澹版槑濡備笅
private Camera[] FindObjects()
{
return FindObjectsOfType<Camera>();
}
鍒涘缓鍒楁柟娉旵reateCameraColumn濡備笅
private SerializedPropertyTreeView.Column[] CreateCameraColumn(out string[] propnames)
{
propnames = new string[3];
var columns = new SerializedPropertyTreeView.Column[3];
columns[0] = new SerializedPropertyTreeView.Column
{
headerContent = new GUIContent("Name"),
headerTextAlignment = TextAlignment.Left,
sortedAscending = true,
sortingArrowAlignment = TextAlignment.Center,
width = 200,
minWidth = 25f,
maxWidth = 400,
autoResize = false,
allowToggleVisibility = true,
propertyName = null,
dependencyIndices = null,
compareDelegate = SerializedPropertyTreeView.DefaultDelegates.s_CompareName,
drawDelegate = SerializedPropertyTreeView.DefaultDelegates.s_DrawName,
filter = new SerializedPropertyFilters.Name()
};
columns[1] = new SerializedPropertyTreeView.Column
{
headerContent = new GUIContent("On"),
headerTextAlignment = TextAlignment.Left,
sortedAscending = true,
sortingArrowAlignment = TextAlignment.Center,
width = 25,
autoResize = false,
allowToggleVisibility = true,
propertyName = "m_Enabled",
dependencyIndices = null,
compareDelegate = SerializedPropertyTreeView.DefaultDelegates.s_CompareCheckbox,
drawDelegate = SerializedPropertyTreeView.DefaultDelegates.s_DrawCheckbox,
};
columns[2] = new SerializedPropertyTreeView.Column
{
headerContent = new GUIContent("Mask"),
headerTextAlignment = TextAlignment.Left,
sortedAscending = true,
sortingArrowAlignment = TextAlignment.Center,
width = 200,
minWidth = 25f,
maxWidth = 400,
autoResize = false,
allowToggleVisibility = true,
propertyName = "m_CullingMask",
dependencyIndices = null,
compareDelegate = SerializedPropertyTreeView.DefaultDelegates.s_CompareInt,
drawDelegate = SerializedPropertyTreeView.DefaultDelegates.s_DrawDefault,
filter = new SerializedPropertyFilters.Name()
};
for (var i = 0; i < columns.Length; i++)
{
var column = columns[i];
propnames[i] = column.propertyName;
}
return columns;
}
鑷虫锛屽氨瀹炵幇浜嗘墍鏈夊姛鑳姐
杩欎釜鎺т欢瀹炵敤鎬ч潪甯搁珮锛岄潪甯稿笇鏈沀nity鍥㈤槦鑳藉鏃╂棩鎶婅繖涓帶浠跺叕寮銆