トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

ChinemaChineでTPSとFPSの切り替え【Unity】

Cinemachine

Cinemachineというカメラワークをいい感じにできるUnity公式アセット

docs.unity3d.com

存在は知ってたけど、映像作品作る用だと思って触ってなかった。

でもキャラクターのFPSやTPSに使えるらしいので触ってみる!

light11.hatenadiary.com

セットアップ

こちらの記事を参考にセットアップしました

light11.hatenadiary.com

PackageManagerで入れる

f:id:bibinbaleo:20210219170844p:plain

カメラにBrainをつける

f:id:bibinbaleo:20210219170447p:plain

Chinemachine>CreateVirtualCameraで仮想カメラを作る。

f:id:bibinbaleo:20210219170827p:plain

このコンポーネントがついた空のオブジェクトができる

f:id:bibinbaleo:20210219170444p:plain

仮想カメラで設定した値(位置)がMainCameraに送られるので、MainCameraは動かしても意味がない

FPS・TPS設定

こちらを参考に設定する

bboydaisuke.wp.xdomain.jp

www.youtube.com

仮想カメラのFollowをキャラクターにする。LookAtの対象はなし

f:id:bibinbaleo:20210222100618p:plain

 

BodyはTransposer。FollowOffsetはキャラのいい感じの場所に設定。

Dampongを全部0にするとカメラが遅れてついてくることがなくなる。

f:id:bibinbaleo:20210222100621p:plain

Aimは動画だとPovにしていたけど、あれはマウスの位置に追従してカメラが回転する。

既にドラッグで角度を回転させるようにしていたのでSame As Follow Targetにしたらキャラクターの角度に合わせてついてくるようになった

 

TPSにするにはFollowOffsetのZを後ろにしたらいい

f:id:bibinbaleo:20210222102511p:plain

f:id:bibinbaleo:20210222102550p:plain

スクリプトで切り替え

スクリプトからのTPS,FPSの切り替えはこんな感じでFollowOffset.z の値を変えればいい

    [SerializeField] CinemachineVirtualCamera _VCam;
    private CinemachineTransposer _transposer;
    void Start()
    {
        _transposer = _VCam.GetCinemachineComponent<CinemachineTransposer>();
    }
    public void ChangeFPS()
    {
        _transposer.m_FollowOffset.z = 0.1f;
    }
    public void ChangeTPS()
    {
        _transposer.m_FollowOffset.z = -1f;
    }

f:id:bibinbaleo:20210222164105p:plain

FollowTargetをスクリプトから設定する

読み込んだVRMをFollowしたい。スクリプトから設定できるのかな?

forum.unity.com

できた

using Cinemachine;

~~

[SerializeField] CinemachineVirtualCamera _VCam;

_VCam.Follow = playerObject.transform;

 

回転だけスクリプトから制御したい

AimをSame As Follow Targetにしたらキャラクターの回転に合わせてカメラも回転するけど、上下方向に向かない;;

キャラは上下には回転しないからね

 

上下方向のカメラ移動だけスクリプトからやりたい

AimをNothingにしてVirtualCameraの回転をスクリプトで制御したらできる!

tsubakit1.hateblo.jp

qiita.com