UnityのArticulationBodyの使い方
Unityの「ArticulationBody」の使い方についてまとめました。
1. ArticulationBody
「ArticulationBody」は、Unity 2020.1から利用できる新しい関節コンポーネントです。多くの関節を繋げても、正確で安定した動きを実現できるのが特徴になります。ロボットアームなど多関節ロボットの作成に適しています。
2. 実験環境の作成
実験環境の作成手順は、次のとおりです。
(1) Planeを配置し、Positionに(0, 0, 0)を指定。
(2) 空のGameObjectを配置し、JointAと名前を指定し、Positionに(0, 0.1, 0)を指定。
(3) JoinAの子としてCubeを配置し、Positionに(0, 0.4, 0)、Scaleに(0.2, 1, 0.2)を指定し、色マテリアルを作成して指定。
原点が根本にあるアームを作成できます。
(4) JointAをコピーしてJointBを作成し、JointAの子に配置し、Positionに(0, 0.8, 0.2)を指定。
(5) JointBをコピーしてJointCを作成し、JointBの子に配置し、Positionに(0, 0.8, -0.2)を指定。
(6) 「Main Camera」を以下のように設定。
3. ArticulationBodyの追加
「ArticulationBody」の追加手順は、次のとおりです。
(1) 「JointA」「JointB」「JointC」に「Add Component」で「Articulation Body」を追加。
各可動部分に「ArticulationBody」を追加します。各可動部分同士は親子関係である必要があります。また、「Rigidbody」は必須ではありません。
(2) 「JointA」の「ArticulationBody」を以下のように設定。
この設定により土台が動かなくなります。ルートのArticulationBodyの数少ない設定項目の1つになります。
(3) 「JointB」「JointC」の「ArticulationBody」を以下のように設定。
「Articulation Joint Type」は、次の4種類を指定できます。
「Anchor Position」と「Anchor Rotation」はヒンジの軸の位置と方向を指定します。Hierarchyビューで「JointB」「JointC」を選択してsceneビューを見ると、軸の位置と方向が赤い円で表示されます。
(4) 追加で「JointB」「JointC」の「ArticulationBody」を以下のように設定。
「Drive」は目標(今回はX軸角度)を指定すると、それ維持しようバネのように動作します。設定値の意味は、次のとおりです。
(5) 「JointA」に新規スクリプト「Controller」を追加し、以下のように編集。
・Controller.cs
using UnityEngine;
public class Controller : MonoBehaviour
{
public ArticulationBody[] articulationBodies;
// 定期的に呼ばれる
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Q))
{
var xDrive = this.articulationBodies[2].xDrive;
xDrive.target -= 1f;
this.articulationBodies[2].xDrive = xDrive;
}
else if (Input.GetKey(KeyCode.W))
{
var xDrive = this.articulationBodies[2].xDrive;
xDrive.target += 1f;
this.articulationBodies[2].xDrive = xDrive;
}
else if (Input.GetKey(KeyCode.A))
{
var xDrive = this.articulationBodies[1].xDrive;
xDrive.target -= 1f;
this.articulationBodies[1].xDrive = xDrive;
}
else if (Input.GetKey(KeyCode.S))
{
var xDrive = this.articulationBodies[1].xDrive;
xDrive.target += 1f;
this.articulationBodies[1].xDrive = xDrive;
}
}
}
(6) ControllerのArticulationBodiesに「JointA」「JointB」「JointC」をドラッグ&ドロップ。
4. 実行
Playボタンで実行すると、以下の操作方法で操作できます。
5. ソルバー種別の設定
「Player Settings」で、以下の2つのソルバー種別を選択できます。
TGSを選択することで、PGSに比べて速度は少し遅くなりますが、より正確なシミュレーションが可能になります。
6. 関連
この記事が気に入ったらサポートをしてみませんか?