Transform
Aim Constraints

Constraint

Constraint コンポーネントは、ゲームオブジェクトの位置、回転、スケールをもう 1 つのゲームオブジェクトに関連付けます。コンストレイント (制約) されたゲームオブジェクトは、コンストレイントの元 (ソース) となるゲームオブジェクトに連動して移動、回転、スケールします。

Unity は以下のタイプの Constraint コンポーネントをサポートします。

  • Aim: コンストレイントされたゲームオブジェクトを、コンストレイントのソースゲームオブジェクトを向くように回転させます。

  • Look At: コンストレイントされたゲームオブジェクトを、コンストレイントのソースゲームオブジェクトを向くように回転させます。 (簡略化された Aim Constraint)。

  • Parent: コンストレイントされたゲームオブジェクトを、コンストレイントのソースゲームオブジェクトに連動して移動、回転させます。

  • Position: コンストレイントされたゲームオブジェクトをコンストレイントのソースゲームオブジェクトに連動して移動させます。

  • Rotation: コンストレイントされたゲームオブジェクトをコンストレイントのソースゲームオブジェクトに連動して回転させます。

  • Scale: コンストレイントされたゲームオブジェクトをコンストレイント元のゲームオブジェクトに連動してスケールさせます。

ゲームオブジェクトの関連付け

関連付けするゲームオブジェクトを指定するには Constraint コンポーネントの Sources リストを使用します。

例えば、2D シューティングゲームでプレイヤーの宇宙船 (Spaceship) に十字線を追従させるには、Poseition Constraint コンポーネントを十字線に加えます。十字線を Spaceship に関連付けるには、Poseition Constraint コンポーネントに移動し、Spaceship ゲームオブジェクトを Sources リストに追加します。プレイヤーが Spaceship を動かすと、十字線が続きます。

十字線の Position Constraint。十字線はプレイヤーの Spaceship に追従します (赤枠)。
十字線の Position Constraint。十字線はプレイヤーの Spaceship に追従します (赤枠)。

1 つの Constraint は複数のソースゲームオブジェクトに関連付けできます。この場合、Constraint はソースゲームオブジェクトの平均の位置、回転、スケールを使用します。例えば、ライトをある一群のゲームオブジェクトに向けたい場合は、Light ゲームオブジェクトに Aim Constraint コンポーネントを加えます。次に、Sources リストに照らしたいゲームオブジェクトを加えます。Aim Constraint は、Sources リストのゲームオブジェクトの平均位置の方向にライトを向けます。

Unity はソースゲームオブジェクトを Sources リストに表示されている順に評価します。Position ConstraintScale Constraint では、順番は影響しません。順番は Parent ConstraintRotation ConstraintAim Constraint に影響します。意図した結果を得るには、ゲームオブジェクトをドラッグアンドドロップして Source リストの順序を変更します

一続きのゲームオブジェクトをコンストレイントすることができます。例えば、母親のアヒル (MotherDuck) の後に子アヒル (Duckling) を一列に続かせるとします。ゲームオブジェクト Duckling1Position Constraint コンポーネントを加えます。Sources リストで MotherDuck に関連付けます。次に、Duckling2Position Constraint を加え、Duckling1 に関連付けします。MotherDuck ゲームオブジェクトがシーン内を移動するとき、Duckling1MotherDuck に続き、Duckling2Duckling1 の後に続きます。

Constraint のサイクルを作成しないようにします。なぜなら、ゲーム中に予期せぬ更新を引き起こす原因になるためです。

Constraint プロパティーの設定

Constraint のプロパティーを変更するには Inspector ウィンドウ を使用します。

Position Constraint の Weight と Constraint Settings
Position Constraint の Weight と Constraint Settings

Constraint の影響の強さを変更するには Weight (ウェイト) を使用します。ウェイトが 1 の場合、ソースゲームオブジェクトと同じ割合でコンストレイントされたゲームオブジェクトを更新します。 ウェイトが 0 の場合、Constraint の効果は完全に無くなります。各ソースゲームオブジェクトには個々のウェイトもあります。

Constraint SettingsPosition At Rest プロパティーで、Weight が 0 のとき、または Freeze Position Axes の対応するプロパティーがチェックされていないときに使用する X、Y、Z の値を指定します。

Constraint SettingsPositionOffset プロパティーで、ゲームオブジェクトをコンストレイントするときに使用する位置のオフセット値 X、Y、Z を指定します。

Freeze Position Axes の設定で、コンストレイントを実際に適用する軸を切り替えます。

Constraint のアクティベーションとロック

Constraint の利用には、アクティベーションとロックという 2 つの面があります。

Constraint を有効にすると、コンストレイントされたゲームオブジェクトの位置、回転、スケールを評価します。Unity は非アクティブな Constraint を評価しません。

Constraint をロックすると、ゲームオブジェクトを移動、回転、スケールすることができるようになります。ロックされた Constraint は、ゲームオブジェクトの Transform の関連部分を制御します。ロックされた Constraint を使用してゲームオブジェクトを手動で移動、回転、スケールすることはできません。また、Constraint Settings も編集できません。

ゲームオブジェクトの位置、回転、スケールを手動で編集するには、その Constraint のロックを解除します。ロックされていない状態で Constraint がアクティブである場合、コンストレイントされたゲームオブジェクトかそのソースゲームオブジェクトを移動、回転、スケールすると、Constraint の Constraint Settings が更新されます。

Constraint コンポーネントをゲームオブジェクトに加えるとき、Constraint はデフォルトでは非アクティブでロックされていません。そのため、Constraint をアクティブにしてロックする前に、コンストレイントされたゲームオブジェクトとソースゲームオブジェクトの位置、回転、スケールを微調整できます。

ActivateZero ボタンで簡単に Constraint Settings を更新できます。

  • Activate: ソースゲームオブジェクトからの現在のオフセットを保存し、コンストレイントされたゲームオブジェクトをアクティブにしてロックします。

  • Zero: ソースゲームオブジェクトに合わせて位置、回転、スケールをリセットし、その後、コンストレイントされたゲームオブジェクトをアクティブにしてロックします。

Constraint のアニメーション化と結合

コンストレイントされたゲームオブジェクトが関連付けられたソースゲームオブジェクトを変更するには、アニメーションクリップを使用します。アニメーションがソースゲームオブジェクトを変更すると、コンストレイントされたゲームオブジェクトは変更されます。

また、Constraint コンポーネントのプロパティーをアニメーション化することもできます。例えば、キャラクターの剣を手から背中に移動させるのに Parent Constraint を使用します。最初に、剣のゲームオブジェクトに Parent Constraint を加えます。 Sources リストで、Constraint をキャラクターの手とキャラクターの背骨に関連付けます。剣をアニメーション化するには、各ソースにウェイトのキーフレームを追加します。剣を手から背中に移動するアニメーションにするには、キーフレームを追加して手のウェイトを 0 から 1 に変更し、背骨のキーフレームのウェイトを 1 から 0 にします。

同じゲームオブジェクトに複数種類の Constraint コンポーネントを加えることができます。ゲームオブジェクトを更新するとき、Unity は Inspector ウィンドウ に表示されている順に Constraint コンポーネントを評価します。1 つのゲームオブジェクトに、同じ種類の Constraint コンポーネントは 1 つだけしかアタッチできません。例えば、Position Constraint を複数加えることはできません。

Constraint のインポート

Autodesk® Maya® と MotionBuilder® から FBX ファイルを Unity エディターにインポートするときに、Constraint を含むことができます。Import Settings ウィンドウの Animation をクリックし、Import Constraints をチェックします。

Import Constraints を有効にしたインポート設定
Import Constraints を有効にしたインポート設定

FBX ファイルのすべてのコンストレイントに対して、Unity は自動的に対応する Constraint コンポーネントを加え、それを適切なゲームオブジェクトに関連付けます。

Constraint の追加と編集

Constraint コンポーネントを加えるには、以下の手順を行います。

  1. コンストレイントするゲームオブジェクトを選択します。

  2. Inspector ウインドウで Add Component をクリックし、加えたい Constraint のタイプを選択し、クリックして追加します。

  3. ソースゲームオブジェクトを新しい Constraint に追加するには、そのゲームオブジェクトを Hierarchy (またはシーンビュー) から Sources リストにドラッグします。

  4. コンストレイントされたゲームオブジェクトとそのソースゲームオブジェクトを移動、回転、スケールします。

  5. Constraint をアクティブにするには、ActivateZero をクリックするか、Is ActiveLock をチェックします。

Constraint コンポーネントを編集するには、以下の手順を行います。

  1. エディターでコンストレイントされたゲームオブジェクトを選択します。

  2. Position At Rest フィールドまたは Position Offset フィールドを調整するには、Inspector ウィンドウで Constraint Settings を展開し、Lock のチェックを外してから値を編集します。

  3. 更新する軸を指定するには、Constraint Settings を展開し、Freeze Axes のプロパティーをチェックします。

  4. ソースゲームオブジェクトを Constraint に加えるには、以下の手順を行います。

    • Sources リストに空のスロットがない場合は、リストの下部にある + をクリックします。

    • Constraint ソースとして使用したいゲームオブジェクトをシーンから Sources リストにドラッグします。

  5. ソースゲームオブジェクトを削除するには、Sources リストからゲームオブジェクトを選択し、リストの下にあるマイナス記号 (-) をクリックします。

  6. Sources リストのソースゲームオブジェクトを並べ替えるには、移動したい各ゲームオブジェクトの左側のダブルバーアイコンをクリックし、上下にドラッグします。

    ノート: Sources リストの順序は Position Constraint、Rotation Constraint、Scale Constraint には影響しません。ただし、Parent Constraint と Aim Constraint では、ゲームオブジェクトがどのように移動や回転をするかに影響します。

  7. Is ActiveLock をチェックします。


  • 2018–04–11 編集レビュー を行ってパブリッシュされたページ

  • コンストレイントは 2018.1 で追加 NewIn20181

Transform
Aim Constraints