Unityの「Constraint」という機能を利用すると、オブジェクトの位置や回転を他のオブジェクトと連動させることができます。
Animationだけでは難しいインタラクティブな動きをつくることができ、ゲームなどの制作に役立ちます。
今回の記事では、Constraintの簡単な解説と作例をいくつか紹介します!

Constraintとは
ConstraintはオブジェクトのTransformを他のオブジェクトの動きに合わせて制御する機能です。
clusterのワールドでは、手で持ったアイテムや乗り物の動きで他のアイテムやオブジェクトを制御するといった使い方ができます。
※Constraintについてはこちらの記事でも紹介しています。併せて読んでみてください。
Constraintの種類
Position Constraint / Rotation Constraint / Scale Constraint
Position(位置)、Rotation(回転)、Scale(拡大)をそれぞれ他のオブジェクトと連動させるConstraintです。つくりたいアイテムに合ったものを使いましょう!
参照先のオブジェクトが動くと、それに合わせてConstraintを設定したオブジェクトが動きます。


オブジェクト同士を親子のように動作させる|Parent Constraint
参照先のオブジェクトと親子関係にあるような動きをするConstraintです。
アイテム同士など、オブジェクトの親子関係をつくれないオブジェクト同士を親子のように動作させることができます。

常に指定したオブジェクトの方向を向く|Aim Constraint / Look At Constraint
常に指定したオブジェクトの方向を向くConstraintです。Look At ConstraintはAim Constraintの簡易版で、設定項目が少なく、分かりやすくなっています。

使ってみる
Position Constraintで手で持ったアイテムの足元についてくるオブジェクトをつくる
Position Constraintを使って、小さなCubeを持って動かすと板が足元についてくるようにしてみます。
- まずは手で持てる小さなCubeを用意します。
- Hierarchyを右クリック、または上部メニューのGameObjectのCreate Emptyから新しい空のオブジェクトを作成します。名前をTargetItemとしてください。
- TargetItemのInspectorで、Add ComponentからGrabbable Itemを追加します。
- 続いてHierarchyでTargetItemを右クリックし、子オブジェクトとして3D Object>Cubeを作成します。
- CubeのInspectorでScaleを調整し、持ちやすい大きさにしてください。
- これでConstraintのターゲットが準備できました。

続いてConstraintで動くオブジェクトをつくっていきます。
- 同様に新しい空のオブジェクトを作成し、名前をConstraintPanelとしてください。
- ConstraintPanelはTargetItemの足元に移動しておきます。
- 子オブジェクトにCubeを作成し、Scaleを調整して板状にします。
- Scaleの比率が固定されてしまう場合はクリップのアイコンをクリックして固定を解除してください。

- ConstraintPanelのInspectorでPosition Constraintを追加します。
- Position ConstraintのSourcesのリストで+ボタンを押し、追加された欄にTargetItemをドラッグアンドドロップしてください。
- Position ConstraintのConstraint Settingsで、Freeze Position AxesのYのチェックを外します。こうすることで、平面内の移動のみ追従するようになります。
- Constraint Settingsの設定欄が見当たらない場合は「Constraint Settings」の左にある三角マークをクリックしてください
- Position ConstraintのActivateボタンを押してください。Is Activeにチェックが入り、位置関係が固定されます。

ここまでできたらアップロードして確認しましょう。TargetItemを持つと、足元に板がついてきます。

Look At Constraintで常にアイテムを見るカメラをつくる
Look At Constraintを使って、動き回るアイテムを常に中心に捉えるカメラがつくれます。
- まずはこちらの記事を参考にCameraとRender Textureを設置します。

- CameraにLook At Constraintコンポーネントを追加します。
- Look At ConstraintのSourcesのリストで+ボタンを押し、追加された欄に先ほど作成したTargetItemをドラッグアンドドロップしてください。
- Activateボタンを押すとIs Activeにチェックが入り、向きが固定されるようになります。

アップロードして確認しましょう。TargetItemを持って動かすと、カメラが常にTargetItemを中心に捉えるようになります。

Parent Constraintで二人乗りの乗り物をつくる
アイテムを別のアイテムの子オブジェクトにすることはできませんが、Parent Constraintを使うことで疑似的に子オブジェクトのように動かすことができます。
ここでは乗り物(Ridable Item)に別の乗り物を追従させることで、二人乗りの乗り物をつくってみます。

- 乗り物と椅子がそれぞれできたら、椅子のInspectorでAdd ComponentからParent Constraintコンポーネントを追加します。
- Parent ConstraintのSourcesのリストで+ボタンを押し、追加された欄に乗り物のオブジェクトをドラッグアンドドロップしてください。
- Activateボタンを押すとIs Activeにチェックが入り、位置関係が固定されます。

アップロードして、別の人と一緒に確認してみましょう。
乗り物に乗って操縦すると、椅子も連動してついてくるようになります。

Constraintを使って工夫すると、アイテムなどに連動した複雑な動きをつくることができます。いろんな組み合わせを試してみましょう。