テラシュールブログ

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

【Unity】Cinemachineの挙動を拡張してみる

 今回はCinemachineの挙動を拡張してみました。

 

 

Cinemachineの挙動を拡張

CinemachineはLookAtとFollow、カメラの向きと位置を各々の要素が補完してカメラワークを作ります。
この挙動は基本的な機能として存在する幾つかの項目(例えばComposerやTransposer)だけでなく、自分で拡張することも出来ます。
なので、今回はとあるついでに拡張してみました。

f:id:tsubaki_t1:20180901231001j:plain

 

 対象をX軸に追跡するだけのカメラ

カメラを横に振るだけのカメラを作ってみました。
Composerのように特定の位置にキャラクターを配置する等は出来ませんが、オフセットで角度を持って対処を追跡することは出来るようにしました。

gist.github.com

特にパッケージを改造する必要などは無く、CinemachineComponentBaseを継承したクラスをプロジェクト内に配置しておけば、自動的に一覧に組み込まれます。
その際、CinemachineCore.Stage Stageプロパティに何を指定するかで、BodyかAIMのどちらに指定するのかが変わります。

 

内容は割と単純で、MutateCameraStateでカメラの動作を指定しているだけです。最終的な位置に向けてRawPositionRawOrientationを設定すれば、よしなにやってくれます。場合によってはPositionCorrection等もどうぞ。
まぁ動けばいいやクォリティなので、実際間違いはあるかもしれませんが、自分の欲しい動きはしたので、まあいいやっていう。

Struct CameraState | Package Manager UI website

 

サンプルコードはPackageManagerにある

コレを実装する上で何をどう書いて良いのか分からんとなるので、コードを色々と参考にさせてもらいました。PackageManagerにあるやつです。

f:id:tsubaki_t1:20180903004534j:plain

PackagerManagerで取得したパッケージはProjectビューから確認することが出来るので、中身を色々と参考にさせてもらいました。
幾つかのパッケージ(例えばECS)はテストも付随してるので「この機能をどうやって使えば良いの?」や「どんな想定の機能なの?」といった疑問には、コレが結構役に立ちます。

ちなみにCinemachineにテストはありません。マア、モトモト販売シテタAssetダシネ

tsubakit1.hateblo.jp