LoginSignup
15

More than 5 years have passed since last update.

SpriteKitの CategoryBitMask、CollisionBitMask、ContactTestBitMask まとめ

Last updated at Posted at 2015-06-16

iOS標準の2D絵動かしライブラリであるSpriteKitですが、物理エンジンが同梱されており、剛体としてふるまってほしいNodeに、 SKPhysicsBody を設定するだけで使えて便利です。

ところでこのオブジェクトは、CategoryBitMaskCollisionBitMaskContactTestBitMask と3つの整数のプロパティを持っていて、ビットフラグを設定することで、衝突するしない、コールバック起動するしない の設定ができるようになっていますが、ビットフラグが3つも必要なのか? 本当に3つも必要なのか? と、設計思想が理解できなくて、どれがどれか覚えられないのでメモっておこうと思いました。
特に、衝突する側か、される側かを意識して使う必要があり、衝突される側の設定を変更して見守っても何の変化しないことが多々あるので注意です。

プロパティ名 意味 デフォルト値
categoryBitMask 自分が属するカテゴリ 0xFFFFFFFF (全てに属する)
collisionBitMask 衝突する側のとき、跳ね返るふるまいをする相手のカテゴリ 0xFFFFFFFF (全てに衝突する)
contactTestBitMask 衝突する側のとき、衝突コールバック (SKPhysicsContactDelegate のメソッド) を起動する相手になるカテゴリ 0 (デフォルトでは何に衝突しても起動されない)

僕が最初にはまった落とし穴
* 衝突される側collisionBitMask を 0 にしても 相変らず衝突するので「あれ?」となった
* おなじく衝突される側categoryBitMask を 0にすると今度は衝突しなくなるので「あれ?」となった
* collisionBitMaskcontactTestBitMask は、 衝突する側のときだけ意味がある

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
15