二代目備忘録

適当に勉強した事を忘れないように講座風に書き留めたりするブログ。

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は呼ばれませんからね、基本的に。

 

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

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