カメラに適当にスクリプトをつけて、そのスクリプトで
var cube : GameObject;をクラス外に宣言して、
inspecterからcube にprojectの適当なオブジェクトを選択。

それでカメラのスクリプトのstartで以下の文でcubeのインスタンスを生成。
Instantiate(cube, Vector3 (0, 0, 0), Quaternion.identity);

あとはhierarchyに適当なオブジェクトを作って、それにスクリプトを設定、
中身はUpdateで前に進む処理を書いてcubeのインスタンスに進んだらぶつかるようにして画面に置いて、
OnCollisionEnterにDebug.Log(collision.gameObject.tag);を書いて、何かぶつかったらそれのタグをログに出すようにしました。

これで、作成したインスタンスに動的にタグを設定したいのですが、
インスタンス生成前にcube.tag = "Finish";としてもログで確認できるタグは初期値の"Untagged"が帰ってきます。
ためしにcube = Instantiate(cube, Vector3 (0, 0, 0), Quaternion.identity);
でインスタンス生成後の戻りを付けとって、それにcube.tag = "Finish"をしても同様に"Untagged"が帰ってきます。

ログが出ていると言うことはオブジェクト同士がぶつかっている(見た目にもぶつかっている)はずなので
タグの設定方法が悪いと思うのですが、どのように書けばtagを設定できるのでしょうか。