LoginSignup
7
6

More than 3 years have passed since last update.

Swift ,SpriteKit ,SKPhysicsBody について (physicsBodyのプロパティ、メソッド篇)

Last updated at Posted at 2019-05-07

1. Defining How Forces Affect a Physics Body : 力が物理体に与える影響の定義

var affectedByGravity: Bool

この物理的ボディが物理的世界の重力の影響を受けるかどうかを示すブール値。

物理学の世界の重力プロパティは、シーン内のボリュームベースのボディに適用される重力を定義します。
デフォルト値はtrueです。 このプロパティはエッジベースのボディでは無視され、ボディは常に重力の影響を受けません。
ffectedByGravityがfalseに設定されている物理体は、linearGravityField(withVector :)およびradialGravityField()によって作成された重力場の影響を受けます。


var allowsRotation: Bool

物理学本体がそれに適用される角力とインパルスの影響を受けるかどうかを示すブール値。

デフォルト値はtrueです。 このプロパティは、システム内の力の影響を受けないエッジベースのボディでは無視されます。


var isDynamic: Bool

よく使うダイナミック
物理学本体が物理学シミュレーションによって移動されるかどうかを示すブール値

フォルト値はtrueです。 値がfalseの場合、物理学本体はそれに適用されるすべての力とインパルスを無視します。 このプロパティは、エッジベースのボディでは無視されます。 それらは自動的に静的です。

2.Defining a Physics Body’s Physical Properties : 物理体の物理的性質を定義する

物理的特性を一度設定するか動的に変更して、物理的本体を移動し、他のオブジェクトと衝突させます。


var mass: CGFloat

体の質量(キログラム)。

相対的なオブジェクトの質量がゲーム全体で一貫している限り、実際の単位は任意です。 体の質量は、その運動量と、物体に力がどのように加わるかに影響します。
質量と密度の特性は相互に関連しています。 どちらかのプロパティの値を変更すると、もう一方のプロパティの値は自動的に再計算されて一貫性が保たれます。 デフォルト値は、物理学本体のサイズと本体のデフォルト密度に基づいています。



var density: CGFloat

オブジェクトの密度(キログラム/平方メートル)。

相対的なオブジェクトの質量がゲーム全体で一貫している限り、実際の単位は任意です。
質量と密度の特性は相互に関連しています。 どちらかのプロパティの値を変更すると、もう一方のプロパティの値は自動的に再計算されて一貫性が保たれます。
デフォルト値は1.0です。


var area: CGFloat

体で覆われた領域。
このプロパティは、体重のプロパティを計算するためにdensityプロパティと組み合わせて使用されます。
面積に返される値はメートル単位で測定されます。SpriteKitで使用されているように、ポイントに変換する必要がある場合は、値に150²を掛けます。 次のリストは、10ポイント四方の箱の面積を計算する方法を示しています。
bodySize = CGSize(幅:10、高さ:10)
physicsBody = SKPhysicsBody(RectangularOf:bodySize)とします。
let areaInPoints = physicsBody.area * pow(150、2)// areaInPoints = 100


var friction: CGFloat

摩擦
物理体の表面の粗さ。

このプロパティは、この物理体と接触している物理体に摩擦力を加えるために使用されます。 プロパティは0.0から1.0の間の値でなければなりません。 デフォルト値は0.2です



var restitution: CGFloat

払い戻し
物理学の体の弾力。

このプロパティは、物理的なボディが他のオブジェクトから反射するときにどれだけのエネルギーを失うかを決定するために使用されます。 プロパティは0.0から1.0の間の値でなければなりません。 デフォルト値は0.2です。


var linearDamping: CGFloat

線形減衰
体の線速度を遅くするプロパティです。

このプロパティは、体にかかる流体または空気の摩擦力をシミュレートするために使用されます。 プロパティは0.0から1.0の間の値でなければなりません。 デフォルト値は0.1です。 値が0.0の場合、オブジェクトに線形減衰は適用されません。


var angularDamping: CGFloat

角度減衰
体の回転速度を遅くする特性。

このプロパティは、体にかかる流体または空気の摩擦力をシミュレートするために使用されます。 プロパティは0.0から1.0の間の値でなければなりません。 デフォルト値は0.1です。 値が0.0の場合、オブジェクトに角減衰は適用されません。


3.Working with Collisions and Contacts:衝突や連絡先を扱う

衝突検出用にノードを設定する方法を学びます。
SpriteKitは、接触したり同じ空間を占有しようと試みる物理体間の2種類の相互作用をサポートします。
連絡先は、2つの体が互いに接触していることを知る必要があるときに使用されます。ほとんどの場合、衝突が発生したときにゲームプレイを変更する必要があるときに連絡先を使用します。
衝突は、2つのオブジェクトが相互に侵入するのを防ぐために使用されます。あるボディが別のボディにぶつかると、SpriteKitは自動的に衝突の結果を計算し、衝突の中のボディにインパルスを適用します。



var categoryBitMask: UInt32

カテゴリビットマスク
この物理体がどのカテゴリに属するかを定義するマスク。

シーン内のすべての物理学本体は、それぞれがビットマスク内のビットに対応する、最大32の異なるカテゴリに割り当てることができます。 あなたはあなたのゲームで使用されるマスク値を定義します。 collisionBitMaskおよびcontactTestBitMaskプロパティと組み合わせて、どの物理体が互いに対話するか、およびゲームがいつこれらの対話を通知されるかを定義します。
デフォルト値は0xFFFFFFFF(全ビット設定)です。


var collisionBitMask: UInt32

衝突ビットマスク
どのカテゴリの物理体がこの物理体と衝突する可能性があるかを定義するマスク。

2つの物理体が互いに接触すると、衝突が発生する可能性があります。 このボディの衝突マスクは、論理積演算を実行して他のボディのカテゴリマスクと比較されます。 結果がゼロ以外の値の場合、このボディは衝突の影響を受けます。 それぞれの団体は、他の団体の影響を受けたいかどうかを独自に選択します。 たとえば、これを使用すると、衝突の計算によってボディの速度に無視できるほどの変化が生じるのを防ぐことができます。
デフォルト値は0xFFFFFFFF(全ビット設定)です。


var usesPreciseCollisionDetection: Bool

精密な衝突検出を使用
物理学の世界で反復的な衝突検出アルゴリズムを使用するかどうかを決定するブール値。

SpriteKitが衝突検出を実行すると、まずシーン内のすべての物理学本体の位置を特定します。それからそれは衝突か接触が起こったかどうか確認する。この計算方法は高速ですが、衝突を見逃してしまうことがあります。小さなボディは非常に速く動くので、2つが互いに接触するアニメーションのフレームがなくても、別の物理ボディを完全に通過します。
衝突しなければならない物理体がある場合は、より正確な衝突モデルを使用して相互作用を確認するようにSpriteKitに指示することができます。このモデルはもっと高価なので、控えめに使うべきです。どちらかのボディが正確な衝突を使用している場合、すべてのコンタクトが確実に検出されるように、複数のコンタクトの反復が評価されます。
デフォルト値はfalseです。衝突する2つの物体が正確な衝突検出を実行せず、1つのフレーム内で一方が他方を完全に通過する場合、衝突は検出されません。どちらのボディでもこのプロパティがtrueに設定されている場合、シミュレーションはこれらの衝突を検出するためにより正確で高価な計算を実行します。このプロパティは、小さくて動きの速い物体ではtrueに設定する必要があります



var contactTestBitMask: UInt32

ビットマスクテストへのお問い合わせ
どのカテゴリの物理体がこの物理体との交差通知を引き起こすかを定義するマスク。

2つのボディが同じスペースを共有している場合は、論理AND演算を実行して、各ボディのカテゴリマスクが他のボディのコンタクトマスクに対してテストされます。 どちらかの比較の結果がゼロ以外の値になった場合は、SKPhysicsContactオブジェクトが作成されて物理学の世界のデリゲートに渡されます。 最高のパフォーマンスを得るために、あなたが興味を持っているインタラクションのためにコンタクトマスクのビットだけを設定してください。
デフォルト値は0x00000000です(全ビットクリア)。



func allContactedBodies() -> [SKPhysicsBody]

全ての接触体()
この物理体が接触している物理体。

戻り値
このボディが接触しているSKPhysicsBodyオブジェクトの配列。


4.Applying Forces and Impulses to a Physics Body:物理の体に力と衝撃を加える

物理体を動かす
速度、重力、衝撃など、さまざまな物理特性を使って体を動かします。



func applyForce(CGVector)

力を適用(_ :)
物理体の重心に力を加えます。
各次元に加えられた力の大きさを表すベクトル。 力はニュートンで測定されます。

この方法は、角加速度を与えずにボディを加速します。 加速度は単一のシミュレーションステップ(1フレーム)に適用されます。



func applyTorque(CGFloat)

トルクを適用(_ :)
オブジェクトにトルクをかけます。
トルクの量(ニュートンメートル)。

この方法では、直線的な加速度を発生させることなく、体に角加速度が発生します。 力は単一のシミュレーションステップ(1フレーム)に適用されます。


func applyForce(CGVector, at: CGPoint)

力を適用(_:at :)
物理体の特定の点に力を加えます。
力が物理ボディに適用された場所を定義するシーン座標内のポイント。

力は体の特定の点に加えられるため、直線加速度と角加速度の両方を与える可能性があります。 力は単一のシミュレーションステップ(1フレーム)に適用されます。


func applyImpulse(CGVector)

インパルスを適用する(_ :)
物理体の重心にインパルスを適用します。
各次元でどれだけの運動量が与えられたかを表すベクトル。 インパルスはニュートン秒で測定されます。

この方法は、体の角速度を変えずに体の線速度に影響を与えます。


func applyAngularImpulse(CGFloat)

角のあるインパルスを適用する()
物体に角運動量を与えるインパルスを適用します。

この方法は、体の線速度を変えずに体の角速度に影響を与えます。


func applyImpulse(CGVector, at: CGPoint)

インパルスを適用(_:at :)
物理学の特定の点にインパルスを適用します。
インパルスが物理ボディに適用された場所を定義するシーン座標内のポイント。

このインパルスはオブジェクト上の特定のポイントに適用されるため、体の速度と角速度の両方を変える可能性があります。

5.Inspecting a Physics Body’s Position and Velocity:物理学の体の位置と速度を調べる


var velocity: CGVector

速度
物理体の速度ベクトル。メートル/秒で測定されます。


var angularVelocity: CGFloat

角速度
物理体の角速度

角速度は、1秒あたりのラジアンで測定される(0.0,0.0,1.0)の軸ベクトルを中心とした擬似ベクトルです。



var isResting: Bool

休んでいる
オブジェクトが物理シミュレーション内で静止しているかどうかを示すブール値プロパティ。

このプロパティは、ボディが静止していると判断したときに、物理シミュレーションによって自動的にtrueに設定されます。 これは、体がシステム内の別の体に静止していることを意味します。 静止物体は、インパルスがオブジェクトに適用されるか、または別のオブジェクトが衝突するまで、物理シミュレーションに参加しません。 これにより、物理シミュレーションのパフォーマンスが向上します。 世界のすべての物体が静止している場合、シミュレーション全体が静止しているので、物理学の世界で実行される計算の数が減ります。

6.Reading a Physics Body’s Node:物理学のノードを読む


var node: SKNode?

SKNodeオブジェクトのphysicsBodyプロパティに割り当てることで、ボディをノードに関連付けます。 本体がノードに関連付けられていない場合、値はnilです。

7.Determining Which Joints Are Connected to a Physics Body:どのジョイントが物理的ボディに接続されているかを判断する


var joints: [SKPhysicsJoint]

関節
関節はこの物理的な体に接続されています。
このプロパティは、このフィジックスボディに接続されているシーンのフィジックスワールドに追加されたすべてのジョイントを定義するSKPhysicsJointオブジェクトの配列を保持します。

8.Interacting with Physics Fields:物理学分野との対話


var fieldBitMask: UInt32

フィールドビットマスク
どの物理学分野のカテゴリがこの物理学本体に力を及ぼすことができるかを定義するマスク。

物理ボディがSKFieldNodeオブジェクトの領域内にある場合、そのフィールドノードのcategoryBitMaskプロパティは、論理AND演算を実行することによって、この物理ボディのfieldBitMaskプロパティと比較されます。 結果がゼロ以外の値の場合、フィールドノードの効果は物理学本体に適用されます。
デフォルト値は0xFFFFFFFF(全ビット設定)です。


var charge: CGFloat

電荷
物理体の電荷

電荷は、電磁界によって物理体への電磁力の影響を計算するために使用されます。 SKFieldNodeを参照してください

9.Pinning a Physics Body to a Node’s Parent:物理ボディをノードの親に固定する

物理ボディの固定と回転
ノードを固定して、親ノードの特定の点を中心に自由に回転できるようにします。


var pinned: Bool

ピン留め
物理ボディのノードがその親ノードに固定されているかどうかを示すブール値。

デフォルト値はfalseです。 trueの場合、ノードの位置はその親に対して相対的に固定されています。 ノードの位置は、行動や物理力によって変更することはできません。 ノードは衝突やその他の力に反応して自由にその位置を中心に回転できます。 親ノードに物理体がある場合、2つの物理体はピンジョイントで接続されているかのように扱われます。

7
6
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
7
6