Hi,
don't be confused with a prefab in your project hierarchy, that you can't work with at runtime, you can only refer to it to instantiate a "copy" in your scene as is, that's what you are likely accessing at runtime.
it's confusing I agree: you could have an hashtable of prefabs, that you need to keep track of, let's say, you have several ennemies, and you want to instantiate them by name, an hashtable is perfect here, during editing create a series of entries in your hashtable "enemy A", "enemy B" each pointing to the proper prefab in your project, and then at runtime, when you need to instantiate enemy A, you get the prefab from this hashtable and use "Create object" to instantiate it.
NOW, the instante you get from "create object", should be stored in a a different palce than in that hashtable, because it's not the same as the prefab itself, and so if you want to access this instante,m sotre it in another hashtable or best in an arraylist, because you are likely to have several enemies of type A, and on top of that ( bear with me
), if you still want to access a particular enenmy A instance in your game, then yes use a hashtable, and keep track of all your instanciated enemies of type + in a dedicated hashtable!
one more thing ( just to go all out on this), you can create hashtbales and arrays at runtime, so if you don't want to hardcode your storage during runtime, you can detect when you instantiate your first enemy of type ? ( A B etc...) and create a hahstable with reference "Enemy X" and so all your game becomes totally flexible, you can add a new type of enemy and you only need to add it in the hashtable refering to the different types of enemies prefabs, everything at runtime will adjust and create what's needed to keep track of all enenmies.
Bye,
Jean