1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cannon.jsの衝突イベントのはまりどころメモ

Last updated at Posted at 2021-01-09

衝突時に音でもならしてみようかなと思って、cannon.jsの衝突検出時に発生するcollideイベントについて調べてみた。

衝突イベントは衝突毎に2回発生する

2つの物体が衝突するので、それぞれの物体に対してイベントを発火するようである。

cannon.js/World.js at master · schteppe/cannon.js · GitHubより抜粋:


if (!this.collisionMatrixPrevious.get(bi, bj)) {
    // First contact!
    // We reuse the collideEvent object, otherwise we will end up creating new objects for each new contact, even if there's no event listener attached.
    World_step_collideEvent.body = bj;
    World_step_collideEvent.contact = c;
    bi.dispatchEvent(World_step_collideEvent);

    World_step_collideEvent.body = bi;
    bj.dispatchEvent(World_step_collideEvent);
}

きわめて低速でも衝突イベントは発生する

下記を使うと衝突時の速度が得られるようである。これを使用して、速度に応じて処理を切り分けるとよいのではないか。※参考サイトのコードでは絶対値(abs)を取っている。詳細調べてないので正確な要否は不明だが、付けておいたほうが無難か。
contact.getImpactVelocityAlongNormal()

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?