物作り冒険譚この広告は、90日以上更新していないブログに表示しています。MOSHIMOというバンドの猫かぶるをヘビロテしている私です。ボーカルの声がとても独特ですぐはまりました。今回も引き続いてTrocco制作から学んだ知識をまとめていこうと思います。今回は「オブジェクトプールとはなんぞ?」がテーマです。オブジェクトプールとは、「オブジェクトをプール(備蓄)しておく」ことで、生成と破壊のコストを削減する方法です。シューティングゲームで弾を打つたびにプレハブを「Instantiate」し、弾が当たるたびに「Destroy」していたのでは、かなりコストがかかってしまいます。弾丸を用意しておいて、それを「SetActive(true)または(false)」して使い回し、コストを下げよう、という方法です。最初に断っておくと、今回紹介する方法は効率が悪いです!(えぇー・・・)効率の良い方法は後々学んでいくとして、今回はとりあえずオブジェクトプールがどんなものか体験してもらおうと思います。1、準備まずは「Cube」を用意し、これをPlayerとします。これに「PlayerController」というスクリプトをアタッチします。次に「Sphere」を用意し、これをBulletとします。これには「BulletScript」をアタッチします。最後に「空のゲームオブジェクト」を用意し、これをBulletGeneratorとします。これには「BulletGenerator」をアタッチします。「Bullet」はプレハブにして消しておきます。2、実装まず「BulletScript」に次のように書いておきます。}}次は「BulletGenerator」に次のように書いておきます。LINQを知っていればこれでもおk。System.Linq;を忘れずに。}}それから「PlayerController」に弾を発射する処理を書いておきます。}}最後に、忘れずにエディタから「弾のプレハブ」と「BelletGenerator」スクリプトを登録しておきましょう。3、実際に試してみるそれではプレイボタンを押して、スペースキーを押してみましょう。「Player」オブジェクトから、丸い「Bullet」オブジェクトが発射されるはずです。弾(Bulletオブジェクト)を発射といった感じです。ここまでオブジェクトプールを説明してきましたが、今紹介した方法そのままでは、スペースキーを早く連打して弾を10発撃ったら、次の弾を撃つまでに少し時間が空いてしまいます。それなら最初に用意する弾の数を「10」ではなくて「20」に増やせばOK、という対処も出来ますが、後々弾の持続時間を延ばした時にまた修正が必要になります。注意しなくてはいけないのが、オブジェクトプールにもコストはかかるので、単純に用意しておく弾の数を増やしておくというのは、逆に負荷が増えることになります。効率の良い方法を知りたい、という方は、Unityの公式チュートリアルでオブジェクトプールが解説されているので、読んでみることをお勧めします。GitHubまたいろんなUnity使いの方(響きがかっこいい)のブログでも紹介されているので、もっと知りたいという方はどうぞ。(2)月別アーカイブ検索はてなブログをはじめよう!MegumiSoftさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。