Google+ もご覧ください
ユーザーアイコン

Unityではじめるゲーム開発

Unity4.3 で追加された Sprite 機能を使ってみよう - その5(Spring Join/Hinge Joint 2Dの解説)

Nakamura001

Unity4.3 で追加された Sprite 機能を使ってみよう - その5(Spring Join/Hinge Joint 2Dの解説)

今回は前回に引き続き、物理エンジン関連のコンポーネントの解説を行います。前回の解説で出てきたプロパティについての説明は省略しますのでその部分については前回の記事を参照して下さい。

今回も実際に動かした時の動作を確認しながら解説を進めます。こちらのプロジェクトを事前にダウンロードして開いておいて下さい。

Spring Joint 2D

Spring Joint 2D は名前の通り、バネのような動作を行います。

シーンファイル Spring を開いて色々と操作してみて下さい。

 Spring Joint 2D のプロパティ
Spring Joint 2D のプロパティ

Damping Ratio ではバネの硬さを指定します。 0 の時に最大の反発力となり、 1 に近いほど硬いバネになります。数値を変更してみて、跳ね具合の違いを確認して下さい。

Frequency は他の Rigid Body とぶつかった時にバネが振動する(厳密には指定された Distance の位置に戻ろうとする)時の周波数を指定します。周波数の設定を高くすると指定された Distance の値から離れた時に即、指定の距離に戻す処理が発生するために硬いバネのような動作となります。逆に低くした場合には指定の距離に戻ろうとする処理が発生する間隔が開くので、良く伸び縮みする柔らかいバネになります。数値を小さくすると MainBall がより弾み、大きくするとほとんど弾まなくなることを確認して下さい。

このサンプルではバネは空中に吊るされたような状態になっています。しかし、ゲーム中で使う場合には地面に固定したような状態で使いたい場合も多いかと思います。そのようなバネのシミュレートは Slider Joint 2D を一緒に使うことで実現できます。

サンプルでは現在、 Slider Joint 2D のチェックを外して無効にしてありますのでチェックを付けて有効にしてみて下さい。すると中央の緑のBoxにバネが固定されたような動作に変わったことが確認できるはずです。

このように Slider Joint 2D と一緒に使う事でバネの回転を防ぐことが可能です。

Hinge Joint 2D

Hinge Joint 2D はドアの蝶番(ちょうつがい)やロボットアームのような動作を行います。

シーンファイル Hinge を開いて実行してみて下さい。

 Hinge Joint 2D のプロパティ
Hinge Joint 2D のプロパティ

動作を確認したら Arm2 を選択し、 Hinge Joint 2DUse Limits にチェックを付けて下さい。この状態で実行するとボールをぶつけた時の回転の範囲が Lower AngleUpper Angle で指定された角度に制限されることが確認できます。

実際に作ってみましょう

次に自分でこの様な Hinge Joint 2D を使った構造物を作成する手順を解説します。

まずはシーンファイル Hinge2 を開いて下さい。ここに先ほどのサンプルと同様に2つのアームを持った構造物を作成していきます。

Arm1Hinge Joint 2D を追加して実行してみましょう。すると Arm1 が (0,0) の位置に移動します。また、白いボールをぶつけると Sprite の中心を軸にした回転することが確認できます。

何故、この様な動作に?

現在の設定は Connected Anchor の座標指定が (0,0) でなおかつ、 Connected Rigid Body の指定が None となっています。そのため、ワールド座標の (0,0) の位置に Arm1 が固定されます。また、 Anchor の指定が (0,0) であるため、回転の軸が Sprite の中心に設定されて動作しました。

Sprite の中心ではなく、画像とマッチするように黒いマークのある所を軸に回転させたい所です。そのため、 Anchor の座標指定をこの黒いマークの部分に指定します。

ここを回転の軸にしたい
ここを回転の軸にしたい

この座標を Arm1 の相対座標で取得するために Arm1 の子として空のGameObjectを追加し、名前を AnchorPosition に変更します。

 AnchorPosition を追加
AnchorPosition を追加

その後、その AnchorPosition を黒いマークの位置まで移動させます。これで AnchorPosition の位置が Arm1 からの相対位置となります。

実際に配置すると AnchorPosition の座標は (-1.05, 0, 0) の辺りになるはずです。この座標の X と Y の値を Arm1Hinge Joint 2DAnchor にそのまま設定します。

 Anchor の設定
Anchor の設定

実行時に Arm1 の位置が移動するのもカッコ悪いので Arm1 の座標も調整しておきましょう。 Arm1 の位置を (1.05, 0, 0) に変更して下さい。

 Sprite の位置調整
Sprite の位置調整

Arm をもう一つ追加しましょう。 Arm1 を複製し、名前を Arm2 に変更し、 color の RGBA を (0, 255, 0, 160) に変更しましょう。

Arm2 を Arm1 より前に表示したいので Arm2Order in Layer の値を1に変更します。

 Arm2 の Sprite Rnderer の設定
Arm2 の Sprite Rnderer の設定

Arm1 と Arm2 を繋ぐ

Arm1 と Arm2 を繋ぐために Arm2Hinge Joint 2DConnected Rigid BodyArm1 をドラッグして下さい。

 Arm1 をドラッグ
Arm1 をドラッグ

実行すると Arm2 の回転の軸が Arm1 の中央になっているのが確認できます。

Arm2 は Arm1 を複製したので Arm2 でも Arm1 と同様に黒いマークの部分が回転の軸となります。

このマークの部分が (0, 0) の位置となる様に設定して有る為、 Arm2 の回転の軸が Arm1 の中央になりました。

Arm1 の端に Arm2 を繋ぐ

次に Arm2 を繋ぐ位置を Arm1 の端に変えてみましょう。

Arm2 を移動さ、以下のような状態にして下さい。

 Arm2 を繋ぐ位置を Arm1 の端に
Arm2 を繋ぐ位置を Arm1 の端に

Arm1 の子として 空のGameObject を追加し、名前を ConnectedPosition と変更して下さい。

 ConnectedPosition を追加
ConnectedPosition を追加

ConnectedPositionArm2 の黒いマークの部分に移動して下さい。

 ConnectedPosition を移動
ConnectedPosition を移動

位置は (1.08, 0, 0) の辺りになるはずです。この位置が Arm2 の回転の軸にしたい位置となります。この値を Arm2Hinge Joint 2DConnected Anchor に設定しましょう。これで Arm1 の端に Arm2 が繋がった状態になります。

 Arm2 の Connected Anchor の設定
Arm2 の Connected Anchor の設定

終わりに

今回で「Unity4.3 で追加された Sprite 機能を使ってみよう」は終わりです。この記事が皆さんの Unity の2D機能の理解にお役に立てれば幸いです。

Unity
タグ:

記事をリクエストする

関連記事

コメント