Version: 2018.3
Transform
Aim Constraint

コンストレイント

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

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

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

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

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

  • Position: コンストレインされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させて移動します。

  • Rotation: コンストレインされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させて回転します。

  • Scale: コンストレインされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させてスケールします。

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

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

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

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

1 つのコンストレイントは複数のソースゲームオブジェクトに紐づけできます。この場合、コンストレイントはソースゲームオブジェクトの平均の位置、回転、スケールを使用します。例えば、ライトをある一群のゲームオブジェクトに向けたい場合は、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 の後に続きます。

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

コンストレイントのプロパティーの設定

コンストレイントのプロパティーを変更するには Inspector ウィンドウ を使用します。

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

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

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

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

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

コンストレイントのアクティベーションとロック

コンストレイントの利用には、アクティベーションとロックという 2 つの状態があります。

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

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

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

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

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

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

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

コンストレイントのアニメーション化と結合

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

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

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

コンストレイントのインポート

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

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

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

コンストレイントの追加と編集

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

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

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

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

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

  5. コンストレイントをアクティブにするには、ActivateZero をクリックするか、Is ActiveLock をチェックします。

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

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

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

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

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

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

    • コンストレイントのソースとして使用したいゲームオブジェクトをシーンから 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 Constraint