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 を動かすと、十字線が続きます。
1 つのコンストレイントは複数のソースゲームオブジェクトに紐づけできます。この場合、コンストレイントはソースゲームオブジェクトの平均の位置、回転、スケールを使用します。例えば、ライトをある一群のゲームオブジェクトに向けたい場合は、Light ゲームオブジェクトに Aim Constraint コンポーネントを加えます。次に、Sources リストに照らしたいゲームオブジェクトを加えます。Aim Constraint は、Sources リストのゲームオブジェクトの平均位置の方向にライトを向けます。
Unity はソースゲームオブジェクトを Sources リストに表示されている順に評価します。Position Constraint と Scale Constraint では、順番は影響しません。順番は Parent Constraint、Rotation Constraint、Aim Constraint に影響します。意図した結果を得るには、ゲームオブジェクトをドラッグアンドドロップして Source リストの順序を変更します
一連のゲームオブジェクトをコンストレインすることができます。例えば、母親のアヒル (MotherDuck) の後に子アヒル (Duckling) を一列に続かせるとします。ゲームオブジェクト Duckling1 に Position Constraint コンポーネントを加えます。Sources リストで MotherDuck に紐づけます。次に、Duckling2 に Position Constraint を加え、Duckling1 に紐づけします。MotherDuck ゲームオブジェクトがシーン内を移動するとき、Duckling1 は MotherDuck に続き、Duckling2 は Duckling1 の後に続きます。
コンストレイントのサイクルを作成しないようにします。なぜなら、ゲーム中に予期せぬ更新を引き起こす原因になるためです。
コンストレイントのプロパティーを変更するには Inspector ウィンドウ を使用します。
コンストレイントの影響の強さを変更するには Weight (ウェイト) を使用します。ウェイトが 1 の場合、ソースゲームオブジェクトと同じ割合でコンストレイントされたゲームオブジェクトを更新します。 ウェイトが 0 の場合、コンストレイントの効果は完全に無くなります。各ソースゲームオブジェクトには個々のウェイトもあります。
Constraint Settings の Position At Rest プロパティーで、Weight が 0 のとき、または Freeze Position Axes の対応するプロパティーがチェックされていないときに使用する X、Y、Z の値を指定します。
Constraint Settings の PositionOffset プロパティーで、ゲームオブジェクトをコンストレインするときに使用する位置のオフセット値 X、Y、Z を指定します。
Freeze Position Axes の設定で、コンストレイントを実際に適用する軸を切り替えます。
コンストレイントの利用には、アクティベーションとロックという 2 つの状態があります。
コンストレイントを有効にすると、コンストレイントされたゲームオブジェクトの位置、回転、スケールを評価します。Unity は非アクティブなコンストレイントを評価しません。
コンストレイントをロックすると、ゲームオブジェクトを移動、回転、スケールすることができるようになります。ロックされたコンストレイントは、ゲームオブジェクトの Transform の関連部分を制御します。ロックされたコンストレイントを使用してゲームオブジェクトを手動で移動、回転、スケールすることはできません。また、Constraint Settings も編集できません。
ゲームオブジェクトの位置、回転、スケールを手動で編集するには、そのコンストレイントのロックを解除します。ロックされていない状態でコンストレイントがアクティブである場合、コンストレインされたゲームオブジェクトかそのソースゲームオブジェクトを移動、回転、スケールすると、コンストレイントの Constraint Settings が更新されます。
Constraint コンポーネントをゲームオブジェクトに加えるとき、コンストレイントはデフォルトでは非アクティブでロックされていません。そのため、コンストレイントをアクティブにしてロックする前に、コンストレインされたゲームオブジェクトとソースゲームオブジェクトの位置、回転、スケールを微調整できます。
Activate と Zero ボタンで簡単に Constraint Settings を更新できます。
Activate: ソースゲームオブジェクトからの現在のオフセットを保存し、コンストレインされたゲームオブジェクトをアクティブにしてロックします。
Zero: ソースゲームオブジェクトに合わせて位置、回転、スケールをリセットし、その後、コンストレインされたゲームオブジェクトをアクティブにしてロックします。
コンストレインされたゲームオブジェクトが紐づけられたソースゲームオブジェクトを変更するには、アニメーションクリップを使用します。アニメーションがソースゲームオブジェクトを変更すると、コンストレインされたゲームオブジェクトは変更されます。
また、Constraint コンポーネントのプロパティーをアニメーション化することもできます。例えば、キャラクターの剣を手から背中に移動させるのに Parent Constraint を使用します。最初に、剣のゲームオブジェクトに Parent Constraint を加えます。Sources リストで、コンストレイントをキャラクターの手とキャラクターの背骨に紐づけます。剣をアニメーション化するには、各ソースにウェイトのキーフレームを追加します。剣を手から背中に移動するアニメーションにするには、キーフレームを追加して手のウェイトを 0 から 1 に変更し、背骨のキーフレームのウェイトを 1 から 0 にします。
同じゲームオブジェクトに複数種類の Constraint コンポーネントを加えることができます。ゲームオブジェクトを更新するとき、Unity は Inspector ウィンドウ に表示されている順に Constraint コンポーネントを評価します。1 つのゲームオブジェクトに、同じ種類の Constraint コンポーネントは 1 つだけしかアタッチできません。例えば、Position Constraint を複数加えることはできません。
When importing FBX files into the Unity Editor from Autodesk Maya® and MotionBuilder®, you can include Constraints. Click the Animation tab of the Import Settings window and check Import Constraints:
FBX ファイルのすべてのコンストレイントに対して、Unity は自動的に対応する Constraint コンポーネントを加え、それを適切なゲームオブジェクトに紐づけます。
Constraint コンポーネントを加えるには、以下の手順を行います。
コンストレインするゲームオブジェクトを選択します。
Inspector ウインドウで Add Component をクリックし、加えたいコンストレイントのタイプを選択し、クリックして追加します。
ソースゲームオブジェクトを新しいコンストレイントに追加するには、そのゲームオブジェクトを Hierarchy (またはシーンビュー) から Sources リストにドラッグします。
コンストレインされたゲームオブジェクトとそのソースゲームオブジェクトを移動、回転、スケールします。
コンストレイントをアクティブにするには、Activate か Zero をクリックするか、Is Active と Lock をチェックします。
Constraint コンポーネントを編集するには、以下の手順を行います。
エディターでコンストレインされたゲームオブジェクトを選択します。
Position At Rest フィールドまたは Position Offset フィールドを調整するには、Inspector ウィンドウで Constraint Settings を展開し、Lock のチェックを外してから値を編集します。
更新する軸を指定するには、Constraint Settings を展開し、Freeze Axes のプロパティーをチェックします。
ソースゲームオブジェクトをコンストレイントに加えるには、以下の手順を行います。
Sources リストに空のスロットがない場合は、リストの下部にある + をクリックします。
コンストレイントのソースとして使用したいゲームオブジェクトをシーンから Sources リストにドラッグします。
ソースゲームオブジェクトを削除するには、Sources リストからゲームオブジェクトを選択し、リストの下にあるマイナス記号 (-) をクリックします。
Sources リストのソースゲームオブジェクトを並べ替えるには、移動したい各ゲームオブジェクトの左側のダブルバーアイコンをクリックし、上下にドラッグします。
ノート: Sources リストの順序は Position Constraint、Rotation Constraint、Scale Constraint には影響しません。ただし、Parent Constraint と Aim Constraint では、ゲームオブジェクトがどのように移動や回転をするかに影響します。
Is Active と Lock をチェックします。