pg-box.jp
Destroyについての恥ずかしい出来事 | ハコソフト
制作中の勘違いというかもう二度とそんなことないでしょうけど、一応書いておこうと思います。僕みたいな勘違いを起こす人が全くいないとも言い切れないので。 まず基本ですが、ゲームオブジェクト(やコンポーネント)を削除する方法として、Destroyメソッドがあります。 よく見かけるコードで と書いてゲームオブジェクトを削除します。 で、僕はみんなでゲーム制作をする前にサンプルコードやらでこの書き方を見て、実際の制作でも使うようになりました。 で、作ったゲームは吹っ飛びが一つのポイントです。 そうなるとどうやって弾にあたった瞬間敵を消すんじゃなくて、敵が倒れてから消せばいいんだ?という疑問が。 そこで僕は思いつきました。 当たった瞬間にフラグを立ててUpdate関数内で時間を測る!そして時間が来たらDestroyすりゃいいんだ!そしたら倒れきった後にちょっとしたら削除できるじゃん!名案!(まだ突っ込まないでねw) で書きました。コード。 1.衝突したらOnCollisionEnterメソッドが実行されonDestroyフラグがtrueに。 2.onDestroyがtrueになったのでUpdate関数内のdestroyCountの時間をTime.deltaTime分加算しつづける。 3.destroyCountがdestroyTime(今回は10秒)を上回ったら、そのゲームオブジェクトが削除される。 (UpdateやTime.deltaTimeが???な方は書籍『Unity入門』 - Unity におけるフレームと Updateを見ると分かりやすいです) 処理としてはこんな感じです。コレを敵に実装したわけです。 書いた時は思いました。 「してやったり(キリッ」 でも思うわけです。実装の回数も増えて作業を重ねてDestroyを何度も使ううちに。 おかしい、と。 毎回こんなこと書くのか?変数作って秒数数えてってコードを時間差が必要な時は毎回? で調べました。 Unity - オブジェクトの削除 - ActionScript入門Wiki 「第二引数にfloat型の秒数を入れると、その秒数後にオブジェクトが削除されます。」 ・・・ ・・・・・ ・・・・・・・ ・・・・・・・・・第二引数・・・・・だと・・・?! チーン・・・・・なんと無駄な事を・・・・・