12日目 Unity Prefabの情報(ステータス)をそのまま使う方法、引数について
引数の使い方であいまいな部分があったため、ここに記しておきます。
<A>(関数を使う側)
void EncountEnemy()
{
GameObject enemyObj = Instantiate(enemyPrefab); //読み込んだ画像の表示
EnemyManager enemy = enemyObj.GetComponent<EnemyManager>();
//enemyObjの中のEnemyManagerを取得する
battleManager.Setup(enemy); //EnemyManager型の変数
//()内にenemyを入れるために、上の文で取得しておく必要がある
}
<B>(関数を作っている側)
EnemyManager enemy; //publicはつけない(なぜならA で取得しているから)、これは、このスクリプト内で使う変数を作成しているだけ
public void Setup(EnemyManager enemyManager) //EnemyManager型の変数を受け取る関数
{
enemy = enemyManager; //作成した変数=引数にするという意味
enemyUI.SetupUI(enemy);
}
<GetComponentで直接Prefabの情報を取得したのはなぜか>
public void Setup(EnemyManager enemyManager)
このように、関数で扱う引数の型が決まっているときは、関数を作る側でも引数の型の指定をしなければなりません。
今まではヒエラルキー上でEnemyManager(敵のステータス等を設定するもの)を使っていました。しかし、AのスクリプトのようにGetComponentで直接Prefabの情報を取得すれば、EnemyManagerがなくとも元々Prefabに設定されているステータスがそのまま反映されます。
感想
本日は引数の宣言において型を設定するということを学びました。(今までも使っていたのにやっと解決しました・・・)
いままで敵のステータスを設定するためにEnemyManagerというオブジェクトを使っていました。そこで、Prefabの情報を引数としてそのまま使うことで、Prefabに設定されたステータスを用いることができると分かりました。(理解するまでに多大な時間が(´;ω;`))
引数の型の宣言と、GetComponentを同時に使うことでここまで分からなくなるのかと心配になりましたが、オブジェクトが1つ少なくなったため見やすいですね。
勉強時間合計:23h