鍦ㄦ父鎴忎腑锛岀▼搴忥紝缇庢湳锛岀瓥鍒掔敋鑷抽煶鏁堥兘鏄垎宸ュ悎浣滅殑銆傚緢澶氭椂鍊欙紝瀵逛簬unity3d涓竴鍫嗚嫳鏂囷紝澶у閮戒細鐪嬪緱寰堥儊闂枫傚挨鍏舵槸涓嶅悓鐨勭▼搴忓憳锛屽懡鍚嶆柟寮忎篃涓嶅敖鐩稿悓锛岀敋鑷宠繕鏄敤鎷奸煶銆傚洜姝わ紝鍦ㄨ剼鏈腑澧炲姞涓浜涗腑鏂囨樉绀猴紝灏辫兘澶熷緢濂藉湴瑙e喅杩欎釜闂銆
棣栧厛锛寀nity涓浜庡瓧娈(Field)宸茬粡鏈変簡寰堝ソ鐨勪腑鏂囨樉绀烘柟娉昜Header]鏍囩
姣斿
using UnityEngine;
public class TestScript : MonoBehaviour
{
[Header("鍙橀噺A")]
public float A;
}
鏄剧ず濡備笅
浣嗘槸瀵逛簬[Header]锛屽畠鏈韩涓嶆敮鎸佸湪闈炲瓧娈典笂鍋氭爣绛撅紝鎵浠ユ兂鏄剧ず绫荤殑璇存槑鎴栬呯被鍑芥暟鐨勮鏄庡氨鏃犺兘涓哄姏浜嗐
鏃㈢劧濡傛锛屾垜浠彲浠ュ垱寤轰竴涓嚜瀹氫箟鐨勬柊鏍囩MonoHeaderAttribute锛屽畠缁ф壙浜嶩eader锛屽苟涓旈檺鍒跺彧鑳藉湪绫诲拰鍑芥暟涓娿傚綋鐒讹紝鎴戜滑涔熷彲浠ヤ笉缁ф壙Header锛屽畬鍏ㄤ篃鍙互鑷繁鍐欎竴涓粎缁ф壙浜嶢ttribute鐨勬爣绛俱傛濊矾鏄竴鏍风殑銆傝繖閲岀敤鐨勬槸鍓嶈呫
using System;using UnityEngine;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MonoHeaderAttribute : HeaderAttribute
{
public MonoHeaderAttribute(string header) : base(header)
{}
}
鐒跺悗unity涓垱寤轰竴涓猠ditor鐩綍锛屽湪editor鐩綍涓嬪垱寤烘樉绀鸿剼鏈琈onoDescriptionEditor锛岀户鎵夸簬Editor锛屽苟瀹氫簬CustomEditor鏍囩涓篗onoBehaviour銆傛敞鎰忥紝CustomEditor鐨勭浜屼釜鍙傛暟蹇呴』涓簍rue锛岃〃绀哄缁ф壙浜嶮onoBehaviour鐨勫瓙绫婚兘鏈夋晥銆
鍦ㄥ叾OnEnable浜嬩欢涓紝閫氳繃鍙嶅皠鑾峰彇鍒癕onoHeaderAttribute鐨勪俊鎭紝鐒跺悗鍦∣nInspectorGUI鏄剧ず鍑烘潵銆傚綋鐒禡onoDescriptionEditor瀹屽叏鍙互鑷敱瀹氫箟锛岃繖閲屼娇鐢ㄤ簡HelpBox鏉ユ樉绀恒
using UnityEditor;using UnityEngine;
[CustomEditor(typeof(MonoBehaviour), true)]
public class MonoDescriptionEditor : Editor
{
private string m_res;
public void OnEnable()
{
m_res = "";
var type = target.GetType();
var atts = type.GetCustomAttributes(typeof(MonoHeaderAttribute), true);
if (atts.Length <= 0)
return;
var att = (MonoHeaderAttribute)atts[0];
m_res = att.header + "\n";
var methods = type.GetMethods();
foreach (var method in methods)
{
var matts = method.GetCustomAttributes(typeof(MonoHeaderAttribute), true);
if (matts.Length > 0)
{
var matt = (MonoHeaderAttribute)matts[0];
if (method.DeclaringType != null)
m_res += $"\n{method.DeclaringType.Name}.{method.Name}\n{matt.header}\n";
}
}
}
private static bool s_fold = true;
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (string.IsNullOrEmpty(m_res))
return;
var color = GUI.color;
GUI.contentColor = Color.cyan;
s_fold = EditorGUILayout.Foldout(s_fold, "璇存槑");
if (s_fold)
EditorGUILayout.HelpBox(m_res, MessageType.Info);
GUI.contentColor = color;
}
}
鍥炲埌TestScript锛屽姞鍏ヤ竴浜涙祴璇曚唬鐮併傚湪class涓婂拰涓浜涘嚱鏁颁笂锛屽姞鍏ヤ簡涓浜汳onoHeader銆
using UnityEngine;[MonoHeader("杩欐槸涓涓祴璇曡剼鏈細TestScript")]
public class TestScript : MonoBehaviour
{
internal void Start()
{
}
[MonoHeader("杩欐槸涓涓祴璇曞嚱鏁")]
public void TestA()
{
}
[MonoHeader("绗簩涓嚱鏁")]
public void TestB()
{
}
[Header("鍙橀噺A")]
public float A;
}
鏈缁堢粨鏋滄樉绀哄涓
锛圥S锛氳瘯杩囩敤MonoHeader鏇夸唬Header鏉ヤ繚璇佺粺涓鎬э紝浣嗘槸Unity瀵逛簬瀛楁鍙Header锛屾渶缁堟病鏈夋晥鏋滐紝鏁匨onoHeader鐢ㄤ簬绫诲拰鏂规硶鐨勮鏄庯紝瀛楁鐨勮鏄庣敤Header锛