例えば、クラス内にpublicな変数(GameObject)を用意したら、GUI上のプロパティでもGameObjectをセットできるけど、
下のような記述でScript内でもセットすることができると思います
(この場合はHierarchy上にPrefabがない状態を想定)

public GameObject Button_UP;

void Start () {
Button_UP=(GameObject)Instantiate(Resources.Load("Button_UP"));
Instantiate(Button_UP,transform.position,transform.rotation);
}

今、「Quad UI」のScriptを参考に見ているんですが、
「public GameObject Button_UP;」の代わりに「public Button2D Button_UP;」という変数がありました
「Button2D」は「Quad UI」で用意されたScript(クラス?)を示していて、この場合はGUI上のプロパティでは、「Button2D」のScript(コンポーネント?)を持ったGameObjectだけをセットできると理解しています

このようなScript(コンポーネント?)を持ったGameObjectだけをセットできるケースでも、GUI上ではなくScript上でセットしたいのですが、下記の記述で、問題なく起動できる場合と後述のエラーが出る場合があります
@一般的に以下の記述でScript(コンポーネント?)を持ったGameObjectのセットはできているものか、A下記のエラーをご存じの方はいないか
分かる方がいたら教えて下さい

記述
void Start () {
Button_UP=(Button2D)Instantiate(Resources.Load("Button_UP"));
Instantiate(Button_UP,transform.position,transform.rotation);
}

エラー
ArgumentException: The thing you want to instantiate is null.
UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message)

※エラーが出るケースはStart()ではなく、参考にしてる人がawakeの代わりに用意したというInit()というメソッドで書いています
Init()を使うのであれば、大人しくGUI上でセットすればいいのですが、エラーの原因をできれば把握したいです