Tip:
Highlight text to annotate it
X
Instantiate はゲームオブジェクトのクローンを作成する
関数です。これは
プレハブのクローンを使用する場面で主に使用されます。
プレハブとは、単に事前設定された
オブジェクトであり、プロジェクトの Assets に保存されます。
ひとつの例はバズーカからロケットを発射するケースです。
各々のロケットは
ゲーム空間にインスタンス化して
発射できるようにします。
このサンプルでは 'Fire1' を使用して Instantiate 関数を
トリガーします。もっとも基本的な
Instantiate の使用方法では引数はひとつのみであり、
クローンしたオブジェクトを指定します。
このサンプルでは、 rocketPrefab と呼ばれる
public 変数を作成して、
これを Instantiate コマンドに渡します。
しかし、この場合はプレハブは
デフォルトの位置である原点に
インスタンス化されます。このサンプルでは、その位置は
ワールド空間の中心であり、
バズーカが現在ある中心の位置です。
このためゲーム再生すると
ロケットはバズーカの中心に
表示されます。
その代わりにロケットのように発射したいため、
バズーカの銃身から出てくるように
表示される必要があります。
このためには、Instantiate のわずかに異なった
バージョンが必要です。この Instantiate のバージョンでは
3 つの変数が必要です。
インスタンス化されるオブジェクト、すなわち今回はロケットと、
プレハブの新しいクローンを作成するための Position および
Rotation です。
あらかじめ空のゲームオブジェクトを作成して
バズーカの銃身の前に
配置しています。BarrelEnd と呼ばれる
public 変数を作成して、さらに
このコンポーネントの Position および Rotation の値を使用して
新しいロケット プレハブの新しいクローンが出来ます。
これを新しい場所に
インスペクタ上の空の場所に
ドラッグ&ドロップすることで
Transform の Position および Rotation について
BarrelEnd 変数を使用できます。
このためゲーム再生して、 Fire を押すと
ロケットは正しい場所に登場します。
しかし、現時点ではただ落下して、
期待している動きではありません。
インスタンス化により作成したオブジェクト
を変更できることが必要です。
すなわち、ロケットのクローンであり、
通常の Instantiate は Object と呼ばれる型を
戻します。しかしロケットを発射するためには
型を Rigidbody に変更します。
これを実現するためには Instantiate コールの後に
RigidBody を使用して戻り値を
rigidbody 変数に格納し、
rocketInstance と呼ぶことにします。
ここで rocketInstance と呼ばれる
Ridibody 変数をセットアップして
変数を Instantiate 関数の戻り値と
等しくします。これにより
これは Rigidbody であり rocket インスタンスの変数を使用して
Rigidbody クラスの中にある全て、
例えば addForce を見つけることが出来ます。
そして再び barrelEnd の Transform を使用して
Force を追加した方向を
取得することが出来ます。
さらにこれに特定の量を掛け算することが出来ます。
これでゲーム再生をして、
発射したとき、作成したクローンに
Force を加えることによって
ロケットは遠くへ発射されます。
多くのクローンをゲームの中で作成したとき
それらはシーンの中に
残ります。もし
このようなことをする場合、
一定時間の後にワールド空間から破棄するスクリプトが
必要な場合があります。
ここではプレハブは RocketDestruction スクリプトがあり、
1.5 秒後に
オブジェクトを破棄します。