Unity備忘録12頁目「時間経過で自動生成」

江上宿六です。

 

だいたい前回の続きなんですけども、Prefabについては掘り下げていないので

タイトルに関しては変わっています。 プロジェクトやシーンはそのままです。

 

さて前回はクリックしたらSphereを生成するように作りましたが、今回は

時間経過によって自動で生成するようにしてみます。 難しい事はないです。

早速SphereGeneratorスクリプトを編集します。

f:id:y6yegami:20180715174803p:plain

変わった所と言えば7行目、deltaというfloat型の変数が宣言されている点と、

10行目、Update内でそのdeltaにTime.deltaTimeを加算している所、11行目で

そのdeltaが1.0f以上ならdeltaを1.0f減算し、Instantiateをするという感じに

なっている所ですね。

 

Time.deltaTimeですが、これは前回のUpdateが呼ばれてから再び呼ばれるまでに

かかった時間を保持するもので、自分の環境で確認した所だいたい0.0166とか

入っていました。 その値をdeltaに加算していき1.0になるタイミングというのは

1秒が経過した時になるわけなんです。

 

1秒が経過したらプレハブからオブジェクトを生成し、再び1秒を測るために

1.0を引いています。 これ教本だとdeltaを0にしてるんですけど、個人的に

気持ちが悪いので1.0引いてます、誤差でしょうけども。 では実行しましょう。

f:id:y6yegami:20180715175143p:plain

こんな感じで正確には分からないにしても1秒くらいの感覚で生成されています。

時間を計れることで出来るのは敵や弾の時限生成だけでなく、幅広く使う事が

出来るので覚えておくと役に立つと思います。

 

この生成間隔をいじるには、もちろんif文の1.0を変えれば良いわけですけども、

なんとなくこういう方法を提案してみます。

f:id:y6yegami:20180715175745p:plain

 targetという変数をpublicで宣言し1.0で初期化しました。 if文の所の1.0や

条件が通ったときにdeltaから引く値をtargetにしました。 これでこのtargetの

1.0を変更すれば自由に生成間隔を変えられますね。

f:id:y6yegami:20180715180049p:plain

だけだと思ったら大違いです。 publicにしてるのでインスペクターから

生成間隔をいじることが出来るんですよね、これ。 便利だなあ。

f:id:y6yegami:20180715180338p:plain

極端に小さい値にして遊ぶのは基本です、しかしだいたい0.0166くらいが限度。

それくらいに一回くらいしかUpdateは呼ばれませんからね、基本的に。

 

という事で今回はここまでにしますか。 

次回は、とりあえず乱数とかについて記してみるかもしれません。