Unity : Hinge JointのAnchorとAxis設定
Hinge Jointは回転可能な軸が1つだけある結合で、
その名前の通り蝶番のような動きをさせたい場合に使うらしいが、
その設定の中でAnchorとAxisの設定がピンと来なかったのでメモしておく。
いろんなサイトを見てみると、それぞれの説明はこんな感じで書かれていることが多い。
Anchor : ボディが揺れる中心となる軸の位置。
Axis : ボディが揺れる中心となる軸の方向。
なるほど、分からん。と言う感じだが、一回分かるとこの説明でも分かる。
図を使って考えていこう。
今2つのカプセルがHingeJointで繋がっていて、
上のカプセルが親オブジェクトで、下のオブジェクトにヒンジが設定されている。
更に、今は下のカプセルを上のカプセルと下のカプセルの
間のくびれた部分でX軸方向に回転させたいので、
こんなコードを書いてある。
using UnityEngine; using System.Collections; public class RotateController : MonoBehaviour { private Rect TextZone1 = new Rect(0,0,100,50); private Rect TextZone2 = new Rect(0,10,100,50); private Rect TextZone3 = new Rect(0,20,100,50); private GameObject G_bottom; private string s,s2,s3; // Use this for initialization void Start () { G_bottom = GameObject.Find ("Capsule_bottom"); } // Update is called once per frame void Update () { G_bottom.transform.Rotate(1,0,0); s = G_bottom.transform.localEulerAngles.x.ToString (); s2 = G_bottom.transform.localEulerAngles.y.ToString (); s3 = G_bottom.transform.localEulerAngles.z.ToString (); } void OnGUI() { GUI.Label(TextZone1,"x="+s); GUI.Label(TextZone2,"y="+s2); GUI.Label(TextZone3,"z="+s3); } }
あとはHingeJointのAnchorとAxisを適切に設定すれば目的の回転ができるんだが、
果たしてどう設定したら目的の回転ができるでしょうか?と言うのが今回の問題である。
画像で目的の回転を確認するとこんな感じだ。
要するに下側のカプセルを黄色の軸を中心に、青色の軌道で回したい訳だ。
この場合AnchorとAxisの設定はどうすれば良いかと言うと、
(今回の例では)こうなる。
まずAnchorの設定から考えていく。
Anchorは回転させたい物体の回転の中心を設定する部分であるので、
回転させたい物体の回転中心の座標(つまり黄色い軸の座標)を入れる。
因みにこの座標はHingeJointを設定してあるオブジェクト
から見た時の座標になるので注意が必要。
今回は回転中心(黄色い軸)は下側のカプセルの中心から
Y軸方向に+1した位置にあるので
Anchorの値はX=0,Y=1,Z=0になる。
次にAxisについて考える。
Axisは物体を回転させる軸を設定する部分である。
軸の"座標"ではなく、"軸"なので注意しないといけない。
今回はX軸を中心に回転させたいので、
Axisの値はX=1,Y=0,Z=0になる。
因みにこの値もHingeJointを設定してあるオブジェクト
のX軸、Y軸の値である(つまりローカル座標での軸)
ので注意しないといけない。
今回のプロジェクトファイルはこちら↓
http://dry-room.net/files/HingeTest.zip