29
2017
07

Unity缂栬緫鍣ㄥ紑鍙戯細瀹樻柟椋庢牸鐨凾able鎺т欢

Unity缂栬緫鍣ㄥ紑鍙戯細瀹樻柟椋庢牸鐨凾able鎺т欢

Table鎺т欢鑳藉闈炲父鐩磋鍦板睍鐜版壒閲忕殑鏁版嵁銆傚湪Unity涓紝Light Explorer灏辨槸涓涓吀鍨嬬殑鍏锋湁Table鎺т欢鐨勭獥鍙c

20170729_1

濡備笂鍥炬墍绀猴紝绐楀彛涓婃柟鏄4涓猅abButton銆備笅闈㈠氨鏄竴涓猅able銆傝繖涓猅able鍔熻兘闈炲父寮哄ぇ锛屾湁鍒楄〃锛屾帓搴忥紝绛涢夛紝瀹炴椂鍚屾鏁版嵁鏇存柊锛屽疄鏃跺悓姝ラ夋嫨绛夊姛鑳姐

鍦║nity椤圭洰寮鍙戜腑锛屼篃甯稿父闇瑕佸仛杩欑Table鏁版嵁鐨勫睍绀烘垨鑰呯被浼肩殑鍔熻兘锛屾瘮濡傜畝鍗曠殑涓涓渶姹傦紝鎵惧嚭褰撳墠鍦烘櫙涓墍鏈夌殑Camra锛屽苟鏄剧ず瀹冪殑鏌愪簺灞炴с傜敤Table鎺т欢灞曠ず濡備笅

20170729_2

杩欎釜鏄竴涓畝鍗曠殑绐楀彛锛屾弧瓒充笂杩扮殑闇姹傘傝繖绉嶅畼鏂归鏍肩殑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鍥㈤槦鑳藉鏃╂棩鎶婅繖涓帶浠跺叕寮銆

椤圭洰鍦板潃锛https://github.com/CodeGize/UnityTable

芦 涓婁竴绡 涓嬩竴绡 禄