unity3d编辑器界面扩展,编辑状态下显示选择对象的所有脚本组件代码内容

来源:互联网 发布:网络审查 论文 编辑:程序博客网 时间:2024/05/22 12:10

转载自:http://blog.csdn.net/andyhebear/article/details/47833383


using UnityEngine;using UnityEditor;using System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;[CanEditMultipleObjects()][CustomEditor(typeof(Transform), true)]public class SelectObjShowCodeSnapEditor : Editor {     // Use this for initialization    bool btnclick, quickOpen = false;    Vector2 scrollPos=new Vector2(0,0);   public override void OnInspectorGUI(){base.DrawDefaultInspector();        MonoBehaviour[] scripts=(target as Transform).gameObject.GetComponents<MonoBehaviour>();        if (scripts != null && scripts.Length > 0) {            //            GUILayout.BeginVertical("Box");            quickOpen = EditorGUILayout.Foldout(quickOpen, new GUIContent("--- Frequent functions ---"));            if (quickOpen) {                AddButton("Awake", "");                AddButton("Start", "");                AddButton("FixedUpdate ", "");                AddButton("OnEnable / OnDisable", "");                GUILayout.Space(20.0f);                GUILayout.BeginHorizontal();                GUILayout.BeginVertical(GUILayout.Width(145.0f));                AddButton("OnCollisionEnter", "Collision collision");                AddButton("OnCollisionStay", "Collision collision");                AddButton("OnCollisionExit", "Collision collision");                GUILayout.EndVertical();                GUILayout.BeginVertical(GUILayout.Width(145.0f));                AddButton("OnTriggerEnter", "Collider other");                AddButton("OnTriggerStay", "Collider other");                AddButton("OnTriggerExit", "Collider other");                GUILayout.EndVertical();                GUILayout.EndHorizontal();                GUILayout.Space(20.0f);                GUILayout.BeginHorizontal();                GUILayout.BeginVertical(GUILayout.Width(145.0f));                AddButton("OnMouseEnter");                AddButton("OnMouseOver");                AddButton("OnMouseExit");                GUILayout.EndVertical();                GUILayout.BeginVertical(GUILayout.Width(145.0f));                AddButton("OnMouseDown");                AddButton("OnMouseDrag");                AddButton("OnMouseUp");                GUILayout.EndVertical();                GUILayout.EndHorizontal();                GUILayout.Space(20f);                                AddButton("Update");                              AddButton("LateUpdate");                GUILayout.Space(20);                AddButton("OnPreCull  OnBecameVisible/OnBecameInvisible  OnWillRenderObject");                AddButton("OnPreRender OnRenderObject  OnPostRender  OnRenderImage  ", "");                AddButton("OnGUI");                AddButton("OnDrawGizmos ");                GUILayout.Space(10);                AddButton("OnDestroy");            }            GUILayout.EndVertical();            //            //-----            //            if (GUILayout.Button("--- code ---")) {                btnclick = !btnclick;                //btnclick = EditorGUILayout.Foldout(btnclick, new GUIContent("脚本列表"));            }            if (btnclick) {                scrollPos =                 EditorGUILayout.BeginScrollView(scrollPos, GUILayout.MinWidth(400), GUILayout.MinHeight(400));                EditorGUILayout.BeginVertical();                int c = scripts.Length;                for (int i = 0; i < c; i++) {                    string scriptName, scriptPath;                    scriptName = GetAssetName(scripts[i], out scriptPath);                    GUILayout.Label("[" + i.ToString() + "]:  " + scriptName);                    if (GUILayout.Button("Open")) {                        Process.Start(Application.dataPath + "/../" + scriptPath);                    }                    GUILayout.Space(4);                    string scriptTxt = System.IO.File.ReadAllText(scriptPath);                    GUILayout.TextArea(scriptTxt);                    GUILayout.Space(4);                }                EditorGUILayout.EndVertical();                EditorGUILayout.EndScrollView();            }                }}    void AddButton(string add, string arg = "", string argType = "") {        GUI.SetNextControlName("FocusFix");        if (GUILayout.Button(add, "OL Plus", GUILayout.MinWidth(80.0f))) {            //AddFunction(add, arg, argType);            GUI.FocusControl("FocusFix");        }    }    public string GetAssetName(UnityEngine.MonoBehaviour asset, out string assetPath) {        assetPath = AssetDatabase.GetAssetPath(MonoScript.FromMonoBehaviour(asset));        //assetPath = AssetDatabase.GetAssetPath(asset.GetInstanceID());        string csname= assetPath.Remove(0, assetPath.IndexOf('/') + 1);        return csname;    }// Update is called once per frame}

原文:http://blog.csdn.net/andyhebear/article/details/47833383

0 0