テラシュールブログ

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

【Unity】CinemachineのClear Shotという機能

自分はCinemachineの機能は結構好きで、色々と遊んでみたりしているのです。それでもなお首を撚る系の機能「Clear Shot」についてです。

Clear Shot

Clear ShotはCinemachineに含まれるカメラ挙動の一つで、主な用途は 「キャラクターがカメラ外に行くのを防ぐ」 というものです。他のFollowLookAt系のようなカメラを追随するのではなくアクティブなVirtual Cameraそれ自体を切り替えるという点が特徴といえます。

主な切り替えるための判定は2つです

  • カメラにキャラクターが一定以上近づいた
  • コライダーによってキャラクターが隠れた

キャラクターが隠れた時に、見える位置にカメラを動かす

まずキャラクターが隠れた場合です。

f:id:tsubaki_t1:20181115204335g:plain

例えば下の図では、通常時は青の位置にカメラがありますが、そのままだとオレンジの壁に遮られキャラクター(カプセル君)が見えなくなります。コレを回避するため、高めの位置にVirtual Cameraを配置しておき、それと切り替えることでキャラクターが完全に壁の裏に隠れるのを防ぎます。

f:id:tsubaki_t1:20181115204537j:plain

これは通常のCinemachineColliderと比較して、カメラの切替え先が明確に異なる設定を持つことが可能な点が良いです。 例えば通常は神視点カメラですが、洞窟に入っている間はサードパーソン的な視点とする…といった事も可能です。

f:id:tsubaki_t1:20181115210725g:plain

手順

  1. Cinemachine > ClearShotを選択
  2. CM ClearShot1.CinemachineClearShotLookAtに追跡する対象のGameObjectをセット
  3. CM vcam1を切り替えたいカメラの数だけ増やす。
    その際、常にメインとなるカメラのプライオリティは高めに設定しておく

重要なことは、親(CM ClearShot1)もしくは子の全て(CM vcam1~)のどちらかにCinemachineColliderが設定されていることです。この設定を利用して遮蔽の判定を行っています。遮蔽の判定を行う必要がない場合は、CinemachineColliderAvoid Obstanclesのチェックを外します

f:id:tsubaki_t1:20181115210903j:plain

f:id:tsubaki_t1:20181115211150j:plain

f:id:tsubaki_t1:20181115211200j:plain

なおCinemachineColliderが障害物を検知してめり込みを回避するため、カメラの切替えがCut以外だとカメラが急激に動きます。コレを回避したい場合はCinemachineColliderDumpingWhenOccludedを少し高めに設定しておきます。

f:id:tsubaki_t1:20181115211407j:plain

f:id:tsubaki_t1:20181115211713g:plain

キャラクターが近づいてきた時にカメラを切り替える

次にキャラクターが近づいた場合です。

f:id:tsubaki_t1:20181115212807g:plain

キャラクターがカメラに対して一定以上近くに寄ってきた際に、優先度が切り替わる設定です。実際には遮蔽物で遮られていない、かつ一定範囲内のカメラという条件で取得する際に使う設定のように思います。 下の図でいうところの赤い枠に入るとカメラの切替えが始まります。

f:id:tsubaki_t1:20181115214027j:plain

手順

Optional Target Distanceを設定します。遮蔽物で遮られる予定が無ければAvoid Obstaclesのチェックは外してもOKです。遮蔽物があり複数のカメラが切り替わる場合は、ONにしておきます。

f:id:tsubaki_t1:20181115214327j:plain

使いすぎに注意なのか?

今回紹介したClear Shotですが、使い所はかなり限定されると踏んでいます。

例えば「遮蔽されたときにカメラが切り替わる」場合。今回はカメラの位置を少し上にしただけで、プレイに大した影響は出ないでしょうが、これがカメラの位置がイマジナリーラインを超えてガッツリ変わる場合、ゲームプレイが凄い混乱する気がします。 バイオハザード2やディノクライシスのように、操作性も含めてソレを許容するならば兎も角、こういったカメラ切り替えは最近は余り見ない印象です。いや、特定の位置に近づいたら…等はありそうですが、遮蔽されたら(範囲外に出たら)切り替えるタイプは少なくともパッと思いつきません。

また「近づいたらカメラが切り替わる」、コレはRPGやサードパーソン3Dアクション等でありそうですが、この「近づくと」というのは結構曲者で、カメラの中心点が実際のカメラの位置と異なる場所に調整出来ないと使い勝手が滅法悪いです。 これならばTriggerColliderを用意し、OnTriggerEnter等で反応したカメラの切替えとする方が理にかなっています。また、様々な条件でガチャガチャカメラが切り替わるのは、非常によろしくありません。条件は明確にしておきたい所です。

そして最後に、酔います。今回の記事を書いててカメラをガチャガチャ入れ替えてたんですが、きもちわるい・・・ううっぷ

カメラの操作は、出来るだけプレイヤーが予測できる動きに抑えたい所です。まぁカットシーンやフィルム的なアプローチに利用するのであれば、割とありな気もしますが、その場合はカメラの動きも含めて作っちゃいそうな予感も。

関連

Cinemachine Clear Shotの各項目の設定が日本語で記述されています。

gametukurikata.com

公式チュートリアル動画です。

www.youtube.com