The right way to instantiate a prefab

As I understand, you can only (?) instantiate something if it's already in the scene, even if it's a prefab.

So, is this the right procedure to instantiate a prefab:

1) have an instance of the prefab (call it `monster`) somewhere in your scene (hide it until it's needed). in `function Start()`, assign it to a global `var monster:GameObject=GameObject.Find("monster");`

2) Call `instantiate(monster,pos,rot);` for more prefab `monster`.

Is there a way to skip step 1? What is a better way to instantiate prefabs?

You can assign a Prefab in the editor. Have a public GameObject variable:

var MonsterPrefab : GameObject;

Then once you attach your script to an object you will be able to drag a prefab on to the "Monster Prefab" variable. That will allow you to avoid using GameObject.Find.