今回はphysics2Dの中にあるDistance Joint 2Dについて解説していこうと思います。
Distance Joint 2Dとは
Distance Joint 2Dは、2つのオブジェクト間の距離を保たせるための機能です。
近づきもせず、離れもせず。そんな感じの機能です。
jointというのは「関節」や「付け根」などの意味を持っているそうです。
Distance Joint 2Dの各パラメータ
所々パラメータの名前が見切れていてすみません。
パラメータが多いですが頑張って1つずつ見ていきましょう。
・Enable Collision
このパラメータは、アタッチしたオブジェクトと当たり判定をするかどうかというのを決める為のものです。
これのチェックボックスにチェックをすると衝突する
ようになります。
チェックを外すと、衝突判定をせずにアタッチしたオブジェクトをすり抜けられるようになります。
下のConnected Rigid BodyがNoneの状態でここのチェックを外すと、Rigid Body2Dがないオブジェクトとの衝突判定をしなくなります。
・Connected Rigid Body
ここにオブジェクトをアタッチすると、そのオブジェクトとつながった状態になります。
ここにオブジェクトをアタッチしない場合、ワールド空間とつながった状態になります。
・Auto Configure Connected Anchor
2つ下の「Connected Anchor」を自動的に決めるためのものです。
あまりこれを使うのはオススメしません。これを使うとオブジェクトが変な挙動をする可能性があるからです。
・Anchor
このオブジェクト側の基準点を決めるところです。
ワールド座標ではなく、このオブジェクトのローカル座標になっているので注意してください。
私はX、Yともに0にすることをオススメします。
・Connected Anchor
アタッチしたオブジェクト側の基準点を決めるところです。
ここで使われている座標はアタッチしたオブジェクトのローカル座標です。
こちらもX、Yともに0にすることをオススメします。
・Auto Configure Distance
ここのチェックボックスにチェックを入れると二つのアンカーの距離が下のDistanceに入力されます。
注意点として、このチェックボックスにチェックを入れたままプロジェクトを実行して、どちらかのオブジェクトの座標を直接いじると、Distanceの値が変わってしまいます。もしかしたら他にもDistanceの値が変わってしまうやり方があるかもしれないので、チェックは1回付けたら外しておきましょう
。
・Distance
ここでは、2つのアンカーの距離を決めます。
2つのオブジェクトの距離がここで決められた距離よりも離れていた場合、両方のオブジェクトが決められた距離まで近づいていきます。
・Max Distance Only
ここのチェックボックスにチェックを入れると、2つのオブジェクトはDistanceで決められた距離よりも近づくことができるようになります。
ロープで繋がっているようなイメージです。
・Break Force
二つのオブジェクトのつながりを断ち切り、Distance Joint 2Dを削除する
ために必要な力を決めます。
infinityだと絶対に切れることはありません。
また、infinityに戻したいときは「inf」と入力してください。
スクリプトの一例
private void OnCollisionEnter2D(Collision2D collision)
{
this.GetComponent().enableCollision = true;
this.GetComponent().connectedBody = collision.rigidbody;
this.GetComponent().anchor = new Vector2(0, 0);
this.GetComponent().connectedAnchor = new Vector2(0, 0);
this.GetComponent().distance = 2;
this.GetComponent().maxDistanceOnly = true;
this.GetComponent().breakForce = Mathf.Infinity;
}
これはぶつかってきたオブジェクトを捕まえる的なプログラムです。
あらかじめこのオブジェクトのBody Type(Rigid Body2dのパラメータ)をkinematicにして床とかに触れないようにするか、if文を使って捕まえられるオブジェクトを限定する必要があります。
おわりに
今回は前回よりもパラメータが多いうえにややこしいのも結構あって大変でした。
Joint系は恐らく全部こんな感じだと思いますが、あと8個あるのでそれは全部記事にしていこうと思います。
私もまだまだ理解できていないところが多いので、記事も書きながら勉強していく所存です。なので、この記事を読んでくださった皆様のなかで間違いなどを見つけたら、ご指摘いただけるとこちらとしても嬉しいです。