こんにちは
砲台のようなものを作り、そこから弾丸を大量に射出させています。
弾丸のlifespanは0に設定していて、hitイベントが発生した場合のみdestroyしています。
しかし、おそらくメモリ不足によりhitイベントが起こる前に弾丸がdestroyしてしまいます。
(メモリ不足が原因だと確認したわけではありませんが、動作が重いときに起こりやすいのでメモリ不足では?と推測しています。)
なにかdestroyさせない方法などあるでしょうか?
こんにちは
砲台のようなものを作り、そこから弾丸を大量に射出させています。
弾丸のlifespanは0に設定していて、hitイベントが発生した場合のみdestroyしています。
しかし、おそらくメモリ不足によりhitイベントが起こる前に弾丸がdestroyしてしまいます。
(メモリ不足が原因だと確認したわけではありませんが、動作が重いときに起こりやすいのでメモリ不足では?と推測しています。)
なにかdestroyさせない方法などあるでしょうか?
原因はフレームレートの低下のようです。
弾丸の速度が早いため描画できていないというわけでしょうか?
その場合hitイベントはどうなるのでしょうか?(見えなくてもhit判定があるのかどうか)
幾つか気になった点があります。
1.弾丸を大量に射出とありますが、一度に10発や20発射出するのか、もしくは0.01秒等の非常に短い間隔で射出しているのでしょうか?
2.Hitイベントにブレークポイントを設置した場合、きちんと止まりますか?(Hitイベントは呼ばれていますか?)
3.弾丸の速度を遅くした場合にはHitイベントは呼ばれていますか?
お答えいただければ幸いです。
返信が遅くなってしまい申し訳ありません。
上から順にお答えします。
1.弾丸は0.1秒毎にスポーンします。
2.Hitイベントは発生しています。
3.弾丸の速度を遅くした場合もHitイベントは呼ばれています。
2番のhitイベントが発生するかを確認した際に、決定的な原因を見つけてしまいました^^;
どうやら弾丸が前に発射された弾丸に衝突し、destroyしていたようです。
弾丸の初速は1000で、砲台のtickを0.1秒に設定し、tickイベントが呼ばれるごとに弾丸をスポーンしています。
この設定で弾丸を350発ほど射出すると、弾丸が前に発射された弾丸に衝突するという現象が起きてしまうようです。
何か解決策などあるでしょうか?
弾同士が衝突してHitイベントが呼ばれてしまうのは、あるあるですね。
この問題の解決策として
弾に独自のコリジョンを設定する
必要があります。
プロジェクト設定からCollisionを開き
Object Channelsに名前を
Projectile
デフォルト応答に
Block
を指定します。
下の方にある
Preset
に名前を
Projectile
コリジョンを
Collision Enabled
オブジェクトタイプに
Projectile
を指定します。
そして、Projectileのチェックを
ブロック
から
無視する
に変更します。
コリジョンを設定し終わったら、このコリジョン設定を弾アクターのコリジョンに適用します。
これで弾同士の衝突検知は回避出来ます。
回答ありがとうございます。
弾にはsphere collision とsphere mesh をコンポーネントとして持たせているのですが、どちらのコリジョンをprojectileに設定すればいいのでしょうか?
Sphere Collisionに設定でOKです。
ありがとうございました。無事に弾同士の衝突を回避できました<(_ _)>