CreateAssetMenu making hundreds of submenus?

This is a weird one, and I honestly assume it’s a bug. So, I’m making a Minecraft clone based on these videos and after video 6 I have a script called BiomeAttributes.cs with this code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "BiomeAttributes", menuName = "MCClone / Biome Attribute")]
public class BiomeAttributes : ScriptableObject
{
    public string biomeName;

    public int solidGroundHeight;
    public int terrainHeight;
    public float terrainScale;

    public Lode[] lodes;
}

[System.Serializable]
public class Lode
{
    public string nodeName;
    public byte blockID;
    public int minHeight;
    public int maxHeight;
    public float scale;
    public float threshold;
    public float noiseOffset;
}

After I wrote this and went back into Unity, I right clicked in the project panel and hovered over the “Create” button to show my options to create something, only to discover that there are now literally hundreds of options, 99% of which are “MCClone” and the other 1% are the original options. From my later testing of this, it would appear that every time I hit play, many many more of that same option show up. This doesn’t really impact my ability to do my stuff, but it is rather annoying. If it helps, I’m using Unity 2018.3. Is there a way to fix this, or at least a way to delete those stupid menus?

That’s a strange bug, though I think it may be related to your use of spaces in the menu name. Slashes in a menu name create a sub menu. However you have a space before and after the slash, so the submenu name would have a trailing space and the actual menu item a leading space. This may trip up Unity whenever the scripts are recompiled. It may try to figure out what items have changed and add / remove changed items. Try using

[CreateAssetMenu(fileName = "BiomeAttributes", menuName = "MCClone/Biome Attribute")]
public class BiomeAttributes : ScriptableObject

Note the changed "MCClone/Biome Attribute" where I removed the spaces I mentioned. Of course you should restart Unity to get rid of the messed up menu.

Is it possible that you instantiate more instances of this ScriptableObject in some Update() method? If you use VisualStudio (VS), it will tell you how many references you have to that ScriptableObject (picture red circle on the left).

You can also go in VS, right click on the name of your ScriptableObject (in this case BiomeAttributes) and click “Find all References”.
A windows should pop in, showing the references (picture red circle on the right).