【Unity】Aimコンストレイントで常に特定のゲームオブジェクトの方を向かせる

投稿者: | 2021-06-14

「Aim Constraint」コンポーネントを使って、常に特定のゲームオブジェクトの方を向かせてみます。

まず、シーンにある猿のゲームオブジェクトに、Aimコンストレイントコンポーネントを付けました。

このオブジェクトのローカル座標を見ると、顔の正面は-Y方向で、頭上はZ方向です。

Aimコンストレイントでは、「Aim Vector」と「Up Vector」にこれらを設定します。

これで、「Up Vector」を上に向けながら、「Aim Vector」の方向をソースオブジェクトの方へ向けます。

ソースオブジェクトは、Sourcesの+ボタンを押して、出た欄にドラッグアンドドロップします。

この状態で「Zero」ボタンを押すと、猿の顔がソースオブジェクトの方を向きます。Constraint Settingsの「Lock」にチェックが入って、「Rotation Offset」は0になります。

ソースオブジェクトを動かすと、それに合わせて猿が回転します。

回転を補正する

「Lock」のチェックが入っていると、その下の項目がグレーアウトして、猿を直接回転できなくなっています。チェックを外すと値の変更や回転ができるようになります。

回転させると、「Rotation At Rest」と「Rotation Offset」の値が変わります。TransformのRotationと「Rotation At Rest」は同じ値になっています。

「Activate」ボタンを押すと、再度「Lock」のチェックが入りますが、猿はソースオブジェクトの方に顔を向けません。ソースオブジェクトを動かすと、それに合わせて回転します。

Lockのチェックを外して「Activate」ボタンを押す前に回転させることで、猿の顔が向く方向に補正値を加えることができました。

Rotation At Rest

ウェイトが1だと、猿のオブジェクトはソースオブジェクトに完全に付いていきます。

ウェイトを0にすると、コンストレイントの効果がなくなりました。

このとき、猿のオブジェクトは、「Rotation At Rest」に設定した回転値を持ちます。

コンストレイントの効果は、「Freeze Rotation Axes」のチェックを切ることで、軸ごとに無効にできます。

「Zero」ボタンを押すと、再度猿の顔をソースオブジェクトの方に向かせることができます。

上方向を指定する

「World Up Type」では、上方向を指定します。コンストレイントは、その方向と「Up Vector」が揃うように猿のオブジェクトを回転します。

「Scene Up」はシーンのY軸方向です。これを「Object Up」にすると、「World Up Object」に設定したオブジェクトへの方向が上方向に指定されます。

「World Up Object」に設定したCubeオブジェクトを動かすと、猿がソースオブジェクトを見ながら回転します。

「Object Rotation Up」にすると、このオブジェクトのローカル空間での方向が使われます。この方向は「World Up Vector」で指定します。

これで、Cubeを動かしても猿は回転しませんが、Cubeを回転すると頭の向きが変わります。

「World Up Type」を「Vector」にすると、「World Up Vector」は、ワールド空間の方向として使われます。

ソースオブジェクトを増やす

ソースオブジェクトは+ボタンから複数設定できます。

2つのソースオブジェクトを両方とも1にすると、猿は2つのオブジェクトの中間を向きます。

片方を0にすると、もう片方へ顔を向けます。

0でなく0.5にすると、さらにその中間あたりを向きます。

一人称ステルスホラーゲームをitch.ioで公開しました。

https://www.ame-name.com/archives/13822

コメントを残す

メールアドレスが公開されることはありません。