Instantiate で生成した GameObjectにアタッチしている Script に引数を渡す方法を紹介したいと思います。
例えば、自機から発射されるShotプレハブにShot.csのScriptをアタッチし、
Shot.csを以下のように定義しているとします。
Shot.cs
public class Shot : MonoBehaviour {
// 移動速度を設定
// @param direction 角度
// @param speed 速さ
public void Create(float direction, float speed) {
Vector2 v;
v.x = Mathf.Cos (Mathf.Deg2Rad * direction) * speed;
v.y = Mathf.Sin (Mathf.Deg2Rad * direction) * speed;
rigidbody2D.velocity = v;
}
}
自機(Player.cs)から弾を撃ち、Shot.Create()で移動速度を設定するには以下のように記述します。
Player.cs
GameObject prefab; // あらかじめアタッチしたShotオブジェクト
// 弾を生成
GameObject shot = Instantiate (prefab, transform.position, transform.rotation) as GameObject;
// Shotスクリプトオブジェクトを取得
Shot s = shot.GetComponent<Shot>();
// 移動速度を設定
s.Create(direction, speed);
Instantiateの戻り値は GameObject なので、そこからScriptコンポーネントをGetComponent()で取得すれば、関数を実行するなり、引数を渡すなりが自由にできます。
ポイントとして、Instantiate が返すのは GameObject であってアタッチしているスクリプトのオブジェクトではありません。
そのため、GameObjectからコンポーネントを取り出す処理を挟む必要がある、というところです。