弾の速度がある程度早い場合、一定の確率で衝突判定がされず障害物をすり抜けてしまいます。
弾と障害物のコンポーネントの設定はそれぞれ以下のとおりです。
弾
Rigidbody2D
パラメータ名 | Body Type | simulated | Collision Detection |
---|---|---|---|
設定値 | Kinematic | true | Continuous |
BoxCollider 2D
パラメータ名 | Is Trigger |
---|---|
設定値 | true |
スクリプト
// 移動 void Update() { // 実際は毎フレームGetComponent()している訳ではないですが、省スペース化のため単純にしています GetComponent<Rigidbody2D>().velocity = transform.up * m_fSpeed * Time.deltaTime; } // 衝突判定 void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.CompareTag("Wall")) { // 壁と衝突したら弾は消す Destroy(); } }
障害物
Rigidbody 2D
パラメータ名 | Body Type | simulated | Collision Detection |
---|---|---|---|
設定値 | Kinematic | true | Continuous |
Composite Collider 2D
パラメータ名 | Is Trigger |
---|---|
設定値 | false |
補足
一応すり抜けに関する原因について簡単に調べて分かったことは試しています(transform.positonで移動させず物理演算で移動させる→Rigidbody.velocityを使う、Collision DetectionをContinuousにする)。
何か他に思い当たる原因はあるでしょうか?
弾の速度は極端に速いわけではなくよくあるシューティングゲームと同レベルなので、弾速を落とす以外の方法で解決したいと考えています。
バージョン
2020.3.14f1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/05 20:09