Constraint コンポーネントは、ゲームオブジェクトの位置、回転、スケールをもう 1 つのゲームオブジェクトに紐づけます。コンストレイント (制約) されたゲームオブジェクトは、コンストレイントの元 (ソース) となるゲームオブジェクトに連動して移動、回転、スケールします。
Unity は以下のタイプの Constraint コンポーネントをサポートします。
Aim: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトを向くように回転します。
Look At: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトを向くように回転します (簡略化された Aim コンストレイント)。
Parent: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトに連動させて移動、回転します。
Position: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させて移動します。
Rotation: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させて回転します。
Scale: コンストレイントされたゲームオブジェクトを、紐づけられたゲームオブジェクトと連動させてスケールします。
関連付けするゲームオブジェクトを指定するには Constraint コンポーネントの Sources リストを使用します。
例えば、2D シューティングゲームでプレイヤーの宇宙船 (Spaceship) に十字線を追従させるには、Position Constraint コンポーネントを十字線に加えます。十字線を Spaceship に関連付けるには、Position Constraint コンポーネントに移動し、Spaceship ゲームオブジェクトを Sources リストに追加します。プレイヤーが Spaceship を動かすと、十字線が続きます。
1 つの Constraint は複数のソースゲームオブジェクトに関連付けできます。この場合、Constraint はソースゲームオブジェクトの平均の位置、回転、スケールを使用します。例えば、ライトをある一群のゲームオブジェクトに向けたい場合は、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 の後に続きます。
Constraint のサイクルを作成しないようにします。なぜなら、ゲーム中に予期せぬ更新を引き起こす原因になるためです。
Constraint のプロパティを変更するには Inspector ウィンドウ を使用します。
Constraint の影響の強さを変更するには Weight (ウェイト) を使用します。ウェイトが 1 の場合、ソースゲームオブジェクトと同じ割合でコンストレイントされたゲームオブジェクトを更新します。 ウェイトが 0 の場合、Constraint の効果は完全に無くなります。各ソースゲームオブジェクトには個々のウェイトもあります。
Constraint Settings の Position At Rest プロパティで、Weight が 0 のとき、または Freeze Position Axes の対応するプロパティがチェックされていないときに使用する X、Y、Z の値を指定します。
Constraint Settings の PositionOffset プロパティで、ゲームオブジェクトをコンストレイントするときに使用する位置のオフセット値 X、Y、Z を指定します。
Freeze Position Axes の設定で、コンストレイントを実際に適用する軸を切り替えます。
Constraint の利用には、アクティベーションとロックという 2 つの面があります。
Constraint を有効にすると、コンストレイントされたゲームオブジェクトの位置、回転、スケールを評価します。Unity は非アクティブな Constraint を評価しません。
Constraint をロックすると、ゲームオブジェクトを移動、回転、スケールすることができるようになります。ロックされた Constraint は、ゲームオブジェクトの Transform の関連部分を制御します。ロックされた Constraint を使用してゲームオブジェクトを手動で移動、回転、スケールすることはできません。また、Constraint Settings も編集できません。
ゲームオブジェクトの位置、回転、スケールを手動で編集するには、その Constraint のロックを解除します。ロックされていない状態で Constraint がアクティブである場合、コンストレイントされたゲームオブジェクトかそのソースゲームオブジェクトを移動、回転、スケールすると、Constraint の Constraint Settings が更新されます。
Constraint コンポーネントをゲームオブジェクトに加えるとき、Constraint はデフォルトでは非アクティブでロックされていません。そのため、Constraint をアクティブにしてロックする前に、コンストレイントされたゲームオブジェクトとソースゲームオブジェクトの位置、回転、スケールを微調整できます。
Activate と Zero ボタンで簡単に Constraint Settings を更新できます。
Activate: ソースゲームオブジェクトからの現在のオフセットを保存し、コンストレイントされたゲームオブジェクトをアクティブにしてロックします。
Zero: ソースゲームオブジェクトに合わせて位置、回転、スケールをリセットし、その後、コンストレイントされたゲームオブジェクトをアクティブにしてロックします。
コンストレイントされたゲームオブジェクトが関連付けられたソースゲームオブジェクトを変更するには、アニメーションクリップを使用します。アニメーションがソースゲームオブジェクトを変更すると、コンストレイントされたゲームオブジェクトは変更されます。
また、Constraint コンポーネントのプロパティをアニメーション化することもできます。例えば、キャラクターの剣を手から背中に移動させるのに Parent Constraint を使用します。最初に、剣のゲームオブジェクトに Parent Constraint を加えます。 Sources リストで、Constraint をキャラクターの手とキャラクターの背骨に関連付けます。剣をアニメーション化するには、各ソースにウェイトのキーフレームを追加します。剣を手から背中に移動するアニメーションにするには、キーフレームを追加して手のウェイトを 0 から 1 に変更し、背骨のキーフレームのウェイトを 1 から 0 にします。
同じゲームオブジェクトに複数種類の Constraint コンポーネントを加えることができます。ゲームオブジェクトを更新するとき、Unity は Inspector ウィンドウ に表示されている順に Constraint コンポーネントを評価します。1 つのゲームオブジェクトに、同じ種類の Constraint コンポーネントは 1 つだけしかアタッチできません。例えば、Position Constraint を複数加えることはできません。
Autodesk® Maya® と MotionBuilder® から FBX ファイルを Unity エディターにインポートするときに、Constraint を含むことができます。Import Settings ウィンドウの Animation をクリックし、Import Constraints をチェックします。
FBX ファイルのすべてのコンストレイントに対して、Unity は自動的に対応する Constraint コンポーネントを加え、それを適切なゲームオブジェクトに関連付けます。
Constraint コンポーネントを加えるには、以下の手順を行います。
コンストレイントするゲームオブジェクトを選択します。
Inspector ウインドウで Add Component をクリックし、加えたい Constraint のタイプを選択し、クリックして追加します。
ソースゲームオブジェクトを新しい Constraint に追加するには、そのゲームオブジェクトを Hierarchy (またはシーンビュー) から Sources リストにドラッグします。
コンストレイントされたゲームオブジェクトとそのソースゲームオブジェクトを移動、回転、スケールします。
Constraint をアクティブにするには、Activate か Zero をクリックするか、Is Active と Lock をチェックします。
Constraint コンポーネントを編集するには、以下の手順を行います。
エディターでコンストレイントされたゲームオブジェクトを選択します。
Position At Rest フィールドまたは Position Offset フィールドを調整するには、Inspector ウィンドウで Constraint Settings を展開し、Lock のチェックを外してから値を編集します。
更新する軸を指定するには、Constraint Settings を展開し、Freeze Axes のプロパティをチェックします。
ソースゲームオブジェクトを Constraint に加えるには、以下の手順を行います。
Sources リストに空のスロットがない場合は、リストの下部にある + をクリックします。
Constraint ソースとして使用したいゲームオブジェクトをシーンから Sources リストにドラッグします。
ソースゲームオブジェクトを削除するには、Sources リストからゲームオブジェクトを選択し、リストの下にあるマイナス記号 (-) をクリックします。
Sources リストのソースゲームオブジェクトを並べ替えるには、移動したい各ゲームオブジェクトの左側のダブルバーアイコンをクリックし、上下にドラッグします。
ノート: Sources リストの順序は Position Constraint、Rotation Constraint、Scale Constraint には影響しません。ただし、Parent Constraint と Aim Constraint では、ゲームオブジェクトがどのように移動や回転をするかに影響します。
Is Active と Lock をチェックします。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.