#1 やりたいこと
オブジェクトAがオブジェクトBに接触した時に回転可能に連結される。
#2 方法
オブジェクトAがオブジェクトBに接触した時に、オブジェクトAの座標を接続したい位置にセットし、Hingejointを追加。
Hingejointはデフォルトのままでよい。Auto configure connected anchorがtrueなので、HingeJointを追加する前にオブジェクトAの位置を決めておけばanchor(接続する位置)やconnected anchor(接続される位置)が自動設定される。
#3 コーディング例
CircleCollider2D CC2 = collision.gameObject.GetComponent<CircleCollider2D>();
gameObject.transform.position = collision.gameObject.transform.TransformPoint( new Vector3(CC2.offset.x,CC2.offset.y,0));
HingeJoint2D HJ = gameObject.AddComponent<HingeJoint2D>();
HJ.connectedBody = collision.attachedRigidbody;
collision.gameObject.tag = "Untagged";
上の例では、onTriggerEnter2D内で次のような処理を行なっている。
・collisionから接触したgameObjectの参照を得る。
・接触したオブジェクトのCircleColliderの参照を取得する。
・CircleColliderの中心に位置を合わせてから、HingeJointを追加する。
・HingeJointのconnectedBodyを設定。
最後のタグの書き換えは、何かが接続されたオブジェクトは接続の対象から外して最後尾のみに連結できるようにするため。
連結を解除したいときは、GameObject.Destroy(HJ);。