【Unity】カメラをキャラクターに合わせて動かす

f:id:s44511173:20190717170712g:plain

 

machokoさんの動きに合わせて、カメラが移動しています。これは、StandardAssetsのSmoothFollowスクリプトをカメラにアタッチして実装しています。

SmoothFollowをインポートする

f:id:s44511173:20190717172812p:plain

 StandartAssetsをダウンロードし、インポートします。全部インポートしても良いのですが、今回はピンポイントでSmoothFollowスクリプトのみとしました。SmoothFollow.csは、Standard Assets->Utility下にあります。

ちなみに一部だけインポートすると、インポートしたアイテムが他のアイテムを参照している場合に参照エラーが起きてしまうので、注意が必要です。

 メインカメラにアタッチする

f:id:s44511173:20190717174734p:plain

 先ほどのSmoothFollow.csをメインカメラにアタッチします。インスペクタのAddComponentボタンでも良いし、ヒエラルキーウィンドウにD&DでもOKです。ちなみに私は後者派です。

パラメータを調整する

メインカメラのインスペクタから、 SmoothFollowのパラメータを調整します。

  • Target・・・カメラが追随するターゲットを設定します。
  • Distance・・・カメラとTargetとの距離を設定します。
  • Height・・・Targetからの高さを設定します。
  • Rotation Damping・・・回転速度
  • Height Damping・・・上下移動速度

カスタマイズする

machokoさんがゴール中に入ると、カメラが手前に来すぎてしまい、ステージが見切れてしまう現象が起きました。

 

f:id:s44511173:20190717181013p:plain

これを防ぐために、SmoothFollow.csを少しだけカスタマイズ。

SmoothFollow.csでは、LateUpdateメソッド内でカメラ位置を調整しています。これを、以下のように修正しました。

[SerializeField]
private float zLimit; // Z位置をインスペクタから設定
void LateUpdate()
{
   // ~略~
   // transform.position = new Vector3(transform.position.x ,currentHeight , transform.position.z);
 transform.position = new Vector3(transform.position.x ,currentHeight , Mathf.Max(transform.position.z, zLimit));
}

f:id:s44511173:20190717181023p:plain

 

 結論

  • カメラでターゲットを追随するには、StandardAssetsのSmoothFollowを使うと便利
  • インポートしたスクリプトは、自分好みにカスタマイズしよう
  • アセットは、使うもののみインポートすることができるが、参照エラーが出る場合があるので要注意