gologiusの巣

プログラミング、モデリングなどのメモです。誰かの役に立てるとうれしいです。

【再再更新】Unityでカメラ追跡したときにガタつく原因を考える

Unityで,プレイヤーを追跡するカメラスクリプトを作成していました.

まぁやっている方はたくさんおられるので説明は略しますが...

 

で,ゆっくり追従(追尾、補間)するカメラをつくろうとしたら,カメラがガタついてしまいます.

Vector3.Lerp や Vector3.SmoothDampでの補間を利用したものです↓

Unity でプレイヤーを追跡するカメラのスクリプト

ちなみに僕は Vector3.SmoothDampでやっています.Lerpよりガタつきが減ったように見えたので.

 

調べたところ,物理演算とゲームループが同期できていない?(Unity カメラ がたつく,等で調べてください)のが原因の一つかもしれないことが判明.

【2017/10/15追記】Rigidbodyがついているオブジェクト を追跡する際に発生する問題っぽい?

対策1:Update()から移動させる

処理をFixedUpdate()がLateUpdate()に移植する。

どちらが良いかは不明。 RigidbodyをもつObjectを追跡するときはFixedUpdate()がよいのか?

やってみて治ればバンザイ(∩´∀`)∩

 

対策2:FPSを落とす

ふと,処理速度が速すぎて,追跡しきれてないのでは?と思いFPSを見てみたら300FPSとか普通に出てました.

f:id:kamiwo_koete:20160904104717p:plain

とりあえずFPS落としてみるかと思い↓等を参考にエディタ上やスクリプト上で落としてみました.

Unityゲーム開発所 - UnityでFPSを設定する方法

 

FPS落ちない.上記リンク先によるとビルド後でないと反映されないみたいです.

結局ビルドしてみたらがたつきは治りました. 

前もビルドしたら治った案件があったので,一回ビルドして確かめるのもいいかも.

 

対策3:RigidbodyのInterpolateを見直す

RigidbodyのInterpolateがNoneの場合とそれ以外(Interpolate,Extrapolate)とでがたつきが変わる。Noneにすれば治る場合がある

 

対策4: スクリプトの実行順番を変更する

追跡対象のGameObjectの移動が、カメラ追跡スクリプトの実行順より遅い場合、

・ カメラスクリプトで追跡→GameObjectが移動

となるので、ガタつく?

 

結果:よくわからん

前はFPSを弄ったら治ったし、今やってる案件ではFixedUpdate()に放り込んだら治った。よくわからない。以上。