Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

2dgames_jp
ゲーム作ってます。 ■サイト: http://2dgames.jp ■Twitter: https://twitter.com/2dgames_jp
http://2dgames.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした