気ままなUnityエンジニアブログスマートフォン用の表示で見る気ままなUnityエンジニアブログ新米Unityエンジニアが送る解説アウトプットブログです。【Unity】ObjectPoolとUniRxのストリームで詰まった話2019-06-16【Unity】ObjectPoolとUniRxのストリームで詰まった話Unityスポンサーリンクシューティングゲームの自主開発をやっていて気づいた話。これはPool型でBulletオブジェクトを生成しています。ここで問題なのは、敵を倒した後のBulletがいつまでたっても削除されないと言うことです。今後の教訓のために記事にしました。ObjectPoolを破棄していました。こちらは弾を発生させているEnemyクラスの中で発生しています。この部分でバレット内部の終了処理を行なっていますが、上記のGifの通り、エネミー本体が削除されるとShotBulletのストリームは削除されないため、生成されたバレットは残り続けられてしまいます。しているのが問題でした。オブジェクト指向通り、役割を分散させていないための不具合でした。修正まずはバレット全体を管理する「BulletManager.cs」を作成しました・使用するObjectPoolを一元管理する・登録関数でEnemyごとのバレット発射処理をストリームで取得するそしてEnemyのフィールドにあった弾の管理処理をこちらに移行しました。これによってEnemyが削除された後も弾自体の破棄処理が実行されます。弾の発射ストリームを作成しました。自分の座標を渡して、バレットの発射始点を決定します。0.15fごとに弾を発射します。エネミーはバレット側に発射要望を送ります。バレットは要請がきたら、状況に合わして対応していきます。結果ちょっとわかりづらいですが、Enemyが削除された後もBulletの破棄処理は実行されています。オブジェクト指向の偉大さを噛みしめました。iはてなブログをはじめよう!Wojtekさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。