テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】複数のオブジェクトの位置を元にオブジェクトを動かす、○○○Constraint系というオモシロ機能

Unity 2018で、Aim Constraint、Parent Constraint、Position Constraint、Rotatoin Constraint、Scale Constraintの5つのConstraint戦隊が登場しました。

f:id:tsubaki_t1:20180112222241g:plain

この機能は、複数のオブジェクトの大きさや位置、向きを元に自身の位置を調整する機能です。

この機能を活用すれば、複数のキャラクターの中央に配置する…や、複数のキャラクターの方向を向くようにする…といった表現を簡単に実現できそうです。

例えば上のGifアニメでは、魔王が複数の猫キャラ(勇者・村人A・村人B)の中央に位移動させられており、かつ魔王は勇者の方向を常に向くように制限されています。

 

今回はこのConstraint系のコンポーネントの動作について紹介します。

f:id:tsubaki_t1:20180112221509j:plain

追記:どうも、DCCツールと連携するためのものみたいです。

 

目次

Constraintという機能

使い方は簡単です。

  1. 魔王(のGameObject)にScale Constraintを登録します。
  2. Sourcesの項目を「+」で増やし、勇者パーティの勇者猫、村人A(灰色・ヒロイン)、村人B(茶色)を追加します。
  3. Activeボタンを押します。
  4. 勇者パーティの大きさを変更すると、魔王の大きさも変わります。

f:id:tsubaki_t1:20180112232345j:plain

f:id:tsubaki_t1:20180112232631g:plain

 

 Constraintの設定のアレコレ

Constraint系は各コンポーネント毎に動作はことなりますが、設定機能は実際には殆ど同じです。まずはソレを紹介します。

 

Constarint系コンポーネントを再生せずとも動かすIsActiveという項目

IsActiveは、このConstraint系の機能が有効になっているかどうかです。有効になっていると、例えゲームを再生する前であっても他オブジェクトの制約を受けます。

制約の強度はWeightで設定します。1だと完全に制約下に置かれ、0だと制約から開放されます。

f:id:tsubaki_t1:20180112225014j:plain

 

制約の元となる情報を取得するSourceという項目

Sourceは制約の元となるオブジェクトの一覧です。制約の優先度のような物は右の数字で指定します。

f:id:tsubaki_t1:20180112225208j:plain

 

初期値や動作の制限を設定するConstraint Settingsという項目

少し分かりにくいのが、このConstraintSettingsの項目です。

この項目では、Constraint系でオブジェクトを動かす際のオフセットや制限等を設定します。

f:id:tsubaki_t1:20180112225620j:plain

例えば魔王(大きい)の大きさを他のキャラクターの大きさで変更したいとします。
初期のままだと、魔王の大きさは他のキャラクター(勇者・村人A・村人B)の平均の大きさとなります。
これでは全く強大に見えません。しかし、Constraintで制約されているので魔王の大きさは変化しません。

f:id:tsubaki_t1:20180112225929j:plain

そこで以下の手順で魔王の初期設定を変更することで、魔王を大きくたくましく強大にします。もうもやしっ子とは言わせません

  1. Lockを解除
  2. 魔王を大きくする
  3. 再びロックする

f:id:tsubaki_t1:20180112230309g:plain

 

複数のオブジェクトの中央に行く Position Constraint

Position Constraintは、複数のオブジェクトの中間にキャラクターを配置します。

魔王に付けた場合、魔王は良くある巨大モンスターのように、他のキャラクターの良いように振り回されます。

f:id:tsubaki_t1:20180112223947g:plain

複数のオブジェクトの方向を向くAim Constraint

Aim Constraintはオブジェクト群の方向を向きます。正確には複数のオブジェクトの中間(ウェイトによって変動有り)を向きます。

基本的に勇者たちパーティを見ますが、ウェイトを上げることで魔王のヘイトを上げることが出来ます。

f:id:tsubaki_t1:20180112224319g:plain

複数のオブジェクトの向きを元に向きを決める Rotation Constraint

Rotation Constraintは、魔王を複数のオブジェクトの向きの平均値にします。

つまり勇者パーティが右を向けば魔王は右を向きます。カエルパンチ余裕です。

f:id:tsubaki_t1:20180112223813g:plain

複数のオブジェクトの大きさを元に大きさを決めるScale Constraint

Scale Constraintは、魔王の大きさを他のオブジェクトのオブジェクトの大きさの平均にします。

これは勇者に巨大化(攻撃力が倍)をかけると魔王も一緒に攻撃力が倍になるリスクがありますが、勇者に収縮をかけられても魔王の弱体化を期待できます。

f:id:tsubaki_t1:20180112223723g:plain

オブジェクトの動きを追随する Parent Constraint

Parent Constraintは、Position ConstraintとRotation Constraintの複合のような動きになります。ただ、追随するオブジェクトが一つの場合、親子関係のようにオブジェクトを追随するようになります。

勇者がを動かすと魔王は勇者の子のように動きに追随します。

村人Aを動かしても、魔王は村人Aの子のように動きに追随します(カワイイ!)

f:id:tsubaki_t1:20180112224636g:plain

感想

C#で同じような動きを簡単に組めそうだって?HAHAHA

 DCCツールにある 同じような機能 と連携するためのモノみたいです。
どうも聞いた感じ、インポート時にこの機能の設定が割り当てられるのかな?

http://help.autodesk.com/view/MAYAUL/2016/JPN/?guid=GUID-7665A291-FAA7-44C0-BDEB-A6C83482116C

 

関連

同じくUnity 2018の目玉機能です。こちらは有益です。

tsubakit1.hateblo.jp

コガネブログさんのこの機能の紹介記事です。

baba-s.hatenablog.com