LoginSignup
93
81

More than 5 years have passed since last update.

【Unity】Instantiateで生成したGameObjectのScriptに引数を渡す方法

Last updated at Posted at 2014-05-14

Instantiate で生成した GameObjectにアタッチしている Script に引数を渡す方法を紹介したいと思います。

例えば、自機から発射されるShotプレハブにShot.csのScriptをアタッチし、
001.png

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からコンポーネントを取り出す処理を挟む必要がある、というところです。

93
81
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
81