Constraintをつかってオブジェクトの動きをコントロールしよう

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

記事をシェアしてワールド制作を盛り上げよう!