【Swift】SpriteKitの使い方。物理ボディを不規則な方向に揺らす。(Swift 2.2、XCode 7.3)

2020年6月16日

Noise Fieldとは

本記事では、SKFieldNodeの「Noise Field(以下、ノイズノード)」について説明する。

Noise Field

 

ノイズノードとは、物理ボディを不規則な方向に揺らすノードである。物理ボディが運動していなくても常に揺らす力が働く。

ノイズノードのイメージ

 

ノイズノードを使ってみる

実際にノイズノードをシーンに配置して物理ボディを揺らしてみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。⇒「テスト用プロジェクト

事前準備では2匹のホタルをシーンに追加しておいた。この段階では何も起きない。

2匹のホタルをシーンに配置

 

下図赤枠のSKSファイルを選択してシーンエディタを開く。黄緑枠のオブジェクトライブラリボタンを押して部品一覧を表示し、ドラッグ&ドロップで「Noise Field」をシーンに配置する(紫矢印)。

黄枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Nameに「noise」、Category Maskに「1」、Enabledのチェックを外す。

Noise Fieldをシーンに配置する

 

ホタルの画像を選択、下図赤枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Field Maskに「1」を入力する。もう1匹のホタルも同じようにField Maskを「1」に変更する。

ノイズノードのCategory Maskと、物理ボディのField Maskのビットマスクを同じにしたので、ホタルはノイズノードの力を受けるようになる。
⇒「ビットマスクとは

Field Maskを設定する

 

TestScene.swiftのtouchesBeganメソッドを以下のコードに変更する。

 

以下は実際のプレイ動画。ホタルが。。揺れた。

ソースコードで実装する

シーンエディタではなく、ソースコードでノイズノードを実装する場合は以下のコードのようにする。ついでにホタルとライトを入切してホタルっぽさを演出してみた。

試してみる場合は、先ほどシーンエディタで追加したノイズノードを削除してから行うこと。

 

以下は実際のプレイ動画

 

設定項目

ノイズノードのアトリビュートインスペクタの設定項目は、概ね「Liner Gravity Field(以下、線形重力ノード)」と同じなので、そちらを参照されたし。

Nose Field Nodeのアトリビュートインスペクタ

 

線形重力ノードの説明と異なる項目を説明する。

Strength

設定値を大きくすると、物理ボディの揺れ方が大きくなる。マイナスにすると訳が分からない動きになる。

以下の動画は、strengthを「5」に変更して実行した結果。

 

公式リファレンスには以下のように記載されている。加速はstrengthの大きさに比例する。計算される力は物理ボディの質量に比例する。といったことが書かれている。
⇒公式リファレンス「SKFieldNode

The acceleration is proportional to the field strength in a pseudo-random direction. The calculated force is proportional to the physics body’s mass

 

以下の動画は、strengthは「5」のままで、ホタルノードのmass(質量)を「0.08 ⇒ 20.0」に変更して実行した結果。動きが遅くなった。

 

Anim. Speed

ノイズの発生割合。詳しくは次の記事を参照されたし。⇒「Anim. Speedとは

以下の動画は、strength「5」、Anim. Speed「0.5」、ホタルノードのmass「0.08」の実行結果。実行する度に動きが変わり、いずれ画面の外に飛び出していく。

 

smoothness

動きの滑らかさ。詳しくは次の記事を参照されたし。⇒「smoothnessとは