【Unity 6】CinemachineとTimelineで作るカメラ演出|首振りからFollowまで

広告

Unity 6とCinemachine 3.xで、Timelineを使ったカメラ演出を作ります。柱・地面・Cubeをカラフルに色分けした舞台を用意し、2台のカメラを切り替える「首振り版」から、プレイヤーに付いて動く「Follow版」まで進めます。

Timelineで映画のような演出を作る

Cinemachineは、UnityのTimelineと組み合わせるとさらに便利になります。Timelineに2台のCinemachine Cameraを並べると、カメラの切り替えを時間で指定できます。この章では、その場で首を振るカメラ(首振り版)を作ってから、プレイヤーに付いて動くカメラ(Follow版)に発展させます。

Timelineそのものの使い方(ウィンドウの開き方、トラックとクリップ、音の追加)は、【Unity 6】Timeline入門|Cubeを動かして、C#から演出を再生してみようで詳しく解説しています。この章はTimelineの準備から書いてあるので、その記事を読んでいない方もそのまま進められます。

完成イメージ

3秒の短い演出を作ります。1台目のカメラ(WideCamera)が舞台全体を映し、途中から2台目のカメラ(CloseCamera)へ1秒かけてなめらかに切り替わります。プレイヤーは演出の間、AutoMoveで左から右へ動き続けます。

時間映るカメラ画面の見え方
0〜1秒WideCamera斜め上から舞台全体を見下ろす
1〜2秒WideCamera → CloseCamera(ブレンド)カメラが下がりながら近づく
2〜3秒CloseCamera低い位置からプレイヤーを見る

準備:舞台を用意する

この記事では、CinemachineとTimelineの2つのパッケージを使います。Package Managerで、どちらも入っているか確かめます。

  1. Window → Package Management → Package Manager を開きます。
  2. パッケージの一覧を Unity Registry に切り替えます。
  3. Cinemachine と Timeline を検索します。まだ入っていないほうは Install を押します。すでに入っている場合は、そのまま進めて構いません。

背景が無いと、カメラが動いても画面の変化が分かりません。先に、地面と柱を置いて色を付けます。Unity 6(6000.6.7f1)とCinemachine 3.xで動作を確認しています。Cinemachine 3.xを入れたUnity 6のプロジェクトで進めます。

  1. Hierarchyで右クリック → 3D Object → Plane を作り、名前を Ground にします。Inspectorの Transform を Position (0, -0.5, 0)、Scale (3, 1, 3) にします。
  2. 3D Object → Cube を作り、名前を Pillar1 にします。Position (-4, 0.5, 3)、Scale (1, 2, 1) にします。高さが2の柱を地面に立たせるため、中心のYを 0.5 にしています。
  3. Pillar1 を Ctrl + D(Macでは Cmd + D)で複製し、Pillar2〜Pillar5 にします。X を -2、0、2、4 に変えます(Y と Z はそのままです)。
  4. Projectウィンドウで右クリック → Create → Material を3つ作り、GroundGreen、PillarOrange、CubeBlue という名前にします。Inspectorの Base Map の色を、それぞれ 5A8F4A、E8833A、3A7BE8 にします。
  5. GroundGreen を Ground に、PillarOrange を Pillar1〜Pillar5 にドラッグして付けます。
  6. 3D Object → Cube を作り、名前を Player にします。Position を (0, 0, 0) にして、CubeBlue をドラッグして付けます。柱(Z が3)より手前にあり、高さ1のCubeが地面にちょうど乗ります。
  7. Projectウィンドウで右クリック → Create → MonoBehaviour Script を選び、名前を AutoMove にします。ダブルクリックで開き、次のコードに書き換えます。
using UnityEngine;

public class AutoMove : MonoBehaviour
{
    [SerializeField]
    private float speed = 2f;

    [SerializeField]
    private float distance = 5f;

    private Vector3 startPosition;

    private void Start()
    {
        startPosition = transform.position;
    }

    private void Update()
    {
        float x = Mathf.PingPong(
            Time.time * speed,
            distance * 2f
        ) - distance;

        transform.position =
            startPosition + Vector3.right * x;
    }
}
  1. AutoMove を Player にドラッグして付けます。再生するとPlayerが左から右へ(そして往復して)動きます。

AutoMoveは、Playerを左右に往復させる教材用の簡単なスクリプトです。Timelineのプレビュー(再生ボタンを押さずに時間を動かす確認)では動かないので、動きを見るときは再生してください。

首振り版:2台のカメラをTimelineで切り替える

まず、カメラの位置は固定して、常にプレイヤーの方を向く設定にします。プレイヤーが動くと、カメラはその場で首を振って追いかけます。

カメラ2台を作る

  1. GameObject → Cinemachine → Cinemachine Camera を2回選び、2つ作ります。名前を WideCamera と CloseCamera にします。Hierarchyではどちらも一番外側のオブジェクトにしておきます(Main Cameraや他のカメラの子にしません)。
  2. WideCamera の Transform を Position (-7, 8, -9) にします。
  3. CloseCamera の Transform を Position (3, 1, -6) にします。

2台とも、Inspectorで次のようにします。

  • Tracking Target にプレイヤーをドラッグする
  • Lens の Field Of View を 60 にする
  • Position Control を None にする
  • Rotation Control を Hard Look At にする

Tracking Targetを指定するだけでは、カメラは動きも回転もしません。Rotation Control の Hard Look At で「ターゲットの方を向く」、Position Control の None で「TransformのPositionの場所に置く」を指示しています。

Timelineを用意する

Timelineの基本操作を詳しく知りたい方は、【Unity 6】Timeline入門|Cubeを動かして、C#から演出を再生してみようもご覧ください。

  1. 空のGameObject CutsceneDirector を作ります。
  2. Window → Sequencing → Timeline でTimelineウィンドウを開きます。メニューに Timeline が見当たらないときは、Package Managerで Timeline を入れてください。
  3. Hierarchyで CutsceneDirector を選び、Timelineウィンドウの Create を押して保存します。
  4. Timelineウィンドウの左側(トラック名が並ぶ場所)の空白で右クリック → Cinemachine Track を追加します。
  5. トラックの右側のスロットに、Hierarchyの Main Camera をドラッグします。Cinemachine Brain は Main Camera に付いています。

Timelineを作る(Create を押す)ときは、Hierarchyで CutsceneDirector を選んでから押してください。検証では、Cinemachine Cameraを選んだまま押すと、そのカメラにPlayable Directorが付き、CinemachineCamera should not be a child of CinemachineCamera or CinemachineBrain というエラーが表示されました。このエラーが出たときは、カメラに付いたPlayable Directorを取り除き、Cinemachine Cameraの親子関係を確認してから、CutsceneDirector を選び直してTimelineを作り直します。なお、これは今回の検証環境で確認した例で、必ず起きるという意味ではありません。

ショットを並べる

  1. Cinemachine Trackで右クリック → Add Cinemachine Shot Clip でクリップを2つ作ります。
  2. 1つ目のクリップを選び、Inspectorの Cinemachine Shot のカメラ欄に WideCamera をドラッグします。Start 0、Duration 2 にします。
  3. 2つ目のクリップには CloseCamera をドラッグし、Duration 2、Start 1 にします。先にDurationを入れてからStartを入れると、クリップの長さがそろいます。
  4. 1秒から2秒の間でクリップが重なり、重なった部分に斜めの線が出ます。この1秒間がブレンド(切り替え)です。

確認する

Timelineのルーラー(時間の目盛り)をクリックして、Gameビューを見ます。

  • 0秒:斜め上から舞台全体が見えます。
  • 1.5秒:カメラが下がり、プレイヤーが画面の中央付近に残ったまま、柱が横に流れます。
  • 2.5秒:低い位置のCloseCameraに切り替わっています。

この版でカメラの位置が動くのは、ブレンドの1秒間だけです。その前後は、カメラを置いたまま首だけがプレイヤーを追います。

Follow版:プレイヤーに付いて動くカメラにする

首振り版ではカメラの場所を自分で決めていました。Follow版では、カメラの場所もプレイヤーからの「相対位置」で決め、プレイヤーが動くとカメラも一緒に動きます。Cinemachineの追従カメラ(Follow)と同じ考え方です。2台目だけを変えて、ブレンドのあとはプレイヤーを追いかけるようにします。

項目首振り版Follow版
Position ControlNoneFollow
カメラの位置TransformのPositionで決めるプレイヤーの位置 + Follow Offset
プレイヤーが動いたとき首だけが回るカメラも移動する
向いている場面定点からの撮影追跡シーン
  1. Hierarchyで CloseCamera を選び、Ctrl + D(Macでは Cmd + D)で複製して名前を FollowCamera にします。
  2. FollowCamera の Position Control を Follow に変えます。
  3. Follow Offset を (0, 2, -6) にします。プレイヤーからZ方向に6手前、高さ2の位置にカメラが来ます。
  4. Binding Mode が World Space になっていることを確かめます(初期値です)。プレイヤーが回転しても、カメラが回り込まなくなります。
  5. Position Damping は各軸 1 にします。これで追いかけ方が滑らかになります。
  6. Timelineの2つ目のクリップを選び、Hierarchyから FollowCamera をドラッグして、カメラ欄を CloseCamera から FollowCamera に入れ替えます。クリップの名前も FollowCamera に変わります。

Followを使うと、Transformの Position に入力した値は、Follow Offsetによって上書きされます。カメラの位置を変えたいときは、Follow Offsetの数値を変えてください。

確認する

Timelineのルーラーをクリックして、Gameビューを見ます。次のようになっていれば成功です。

  • 0秒:WideCameraの全景です。斜め上から柱5本とプレイヤーが見えます。
  • 1.5秒:ブレンドの途中です。カメラが下がって近づき、柱が横に流れます。
  • 2.5秒:FollowCameraに切り替わっています。プレイヤーのすぐ後ろ、少し上から、柱を背景にプレイヤーを見ます。

ブレンドのあとは、カメラはプレイヤーからのFollow Offsetの位置を目指して、Position Dampingの分だけ遅れながら滑らかに付いてきます。

Timelineの演出が終わったあとに映るカメラは、Cinemachine BrainがPriorityなどを見て、通常どおりに選びます。終わったあとも決まったカメラを映したいときは、そのカメラのPriorityを高くしてください。

Timelineでうまくいかないときは

こうなった原因直し方
CinemachineCamera should not be a child of CinemachineCamera or CinemachineBrain と表示されるCinemachine Cameraが他のカメラの子になっている、またはカメラ自身にPlayable Directorが付いているCinemachine CameraをHierarchyの一番外側に置き、Playable Directorは CutsceneDirector だけに付ける
Timelineウィンドウに Create だけが出ているCutsceneDirector 以外のオブジェクトを選んでいるCutsceneDirector を選び直す
Gameビューが切り替わらないCinemachine Shotクリップのカメラ欄が空、またはTrackにMain Cameraをバインドしていないクリップを選んでカメラを指定し、Trackに Main Camera をドラッグする
カメラが動かない・回らないTracking Targetを指定しただけになっているRotation Control と Position Control を設定する
切り替えが一瞬で終わる2つのクリップが重なっていないクリップを重ねて、重なった長さを切り替えの秒数にする
Followにしたところ、入力したPositionが戻るFollow Offsetがカメラの位置を決めているFollow Offsetの数値を変える

ほかのUnity・C#の記事は、学習シリーズ一覧から、学ぶ順番に探せます。

訪問数 23 回, 今日の訪問数 24回

広告

C#

Posted by hidepon