How Can I Make A Menu Like "Components\Scripts"?

The menu Components\Scripts is automatically populated with all the scripts in your project. I’d like to implement a similar menu that is dynamically populated in order to create a proper “Open Recent” option in the file menu.

How can I do this? It seems like the only way to add menu items is as attributes which makes them compile-time only… I can’t find a way to get a hold of the main editor menus to add to them either… Thoughts?

Thanks.

You will have to use the MenuItem attribute for static functions. Note that this uses the UnityEditor namespace and has to be in an editor folder.
Example:

using UnityEngine;
using UnityEditor;
using System.Collections;

public class RealtimeReflectionsMenu : ScriptableObject
{
	[MenuItem("GameObject/Realtime Reflections/Add to Selected Object")]
	static void AddToSelectedObject(){

		GameObject reflectionPrefab = (GameObject)AssetDatabase.LoadAssetAtPath ("Assets/Realtime Reflections/Prefabs/Reflection Manager.prefab", typeof(GameObject));
		reflectionPrefab = (GameObject)Instantiate (reflectionPrefab);

		Undo.RecordObject (reflectionPrefab, "Reflection Manager Creation");

		reflectionPrefab.name = "Reflection Manager";
		reflectionPrefab.transform.parent = Selection.activeGameObject.transform;
		
		reflectionPrefab.transform.localPosition = Vector3.zero;
		reflectionPrefab.transform.rotation = Quaternion.identity;
		
		if (!Selection.activeGameObject.GetComponent<Camera>() && Selection.activeGameObject.renderer) {
			reflectionPrefab.GetComponent<RealtimeReflections>().materials = Selection.activeGameObject.renderer.materials;
		}
	}

	[MenuItem("GameObject/Realtime Reflections/Add to Main Camera")]
	static void AddToMainCamera(){

		GameObject reflectionPrefab = (GameObject)AssetDatabase.LoadAssetAtPath ("Assets/Realtime Reflections/Prefabs/Reflection Manager.prefab", typeof(GameObject));
		reflectionPrefab = (GameObject)Instantiate (reflectionPrefab);

		Undo.RecordObject (reflectionPrefab, "Reflection Manager Creation");

		reflectionPrefab.name = "Reflection Manager";
		reflectionPrefab.transform.parent = Camera.main.transform;

		reflectionPrefab.transform.localPosition = Vector3.zero;
		reflectionPrefab.transform.rotation = Quaternion.identity;
	}

	[MenuItem("Component/Realtime Reflections/Planar Reflections/Add to Selected Object")]
	static void AddPlanarToSelectedObject(){

		GameObject go = Selection.activeGameObject;
		go.AddComponent<PlanarRealtimeReflection> ();

		Undo.AddComponent<PlanarRealtimeReflection> (go);

		foreach (Material m in go.renderer.sharedMaterials) {
			m.shader = (Shader)AssetDatabase.LoadAssetAtPath("Assets/Realtime Reflections/Shaders/PlanarReflection.shader", typeof(Shader));
		}
	}
}

This script is from one of my assets, but I have just uploaded it as an example.