2017-04-13 2 views
0

マルチプレイヤーブラウザーゲームで自分のカメラのプレーヤーの後にスムーズフォローを使用しているときに、カメラスタッターが表示されます。プレーヤーの位置はサーバーから受信され、プレーヤーはその位置に移動し、私の目標はスムーズに独自のスムージングをプレイヤーに追いかけることです。スムーズフォローの動きが鈍い

私のゲームはhttp://orn.ioで見つけることができます。現在の状態をスムーズにフォローフォローすることなく、より良いが動きの不安定さと頭痛の原因となります。カメラのフォローのための現在のコードは次のとおりです。

void LateUpdate() 
{ 
    if (Target == null) { 
     return; 
    } 

    currentScale = Mathf.Lerp(currentScale, -GameManager.TotalMass, Mathf.Clamp01 (Time.deltaTime * heightDamping)); 

    Vector3 h = currentScale * 2f * Target.up; 
    Vector3 f = currentScale * 3f * Target.forward; 

    // tried lerping to this value but it causes choppy stutters 
    Vector3 wantedPosition = new Vector3(Target.position.x, Target.position.y, currentScale * 2) + h + f; 

    myTransform.position = wantedPosition; 

    myTransform.LookAt (Target, -Vector3.forward); // world up 
} 

と私は値でいじくり回す日間試してみましたが、固定のタイムスタンプを使用し、FixedUpdateに/更新、使用MoveTowards、およびその他の変更を、カメラの動きを置くが、それでも午前問題を抱えている。

私の問題の一部は、プレイヤーの位置が中文字の途中で目標位置が変化するので、スタッターが途中で変化することです。これにより、先景の途中で変身する目標の位置によってカメラがジャンプ/サッターするようになり、LookAtによってぶれが生じる。

誰もが次のコードを次のように改善する方法を提案できればと思います。

答えて

1

Mathf.Lerp関数を使用する特別な理由はありますか?

Unityが特異移動lerpingために設計されている機能、Vector3.SmoothDamp有する:

void FixedUpdate() { 
    // Code for your desired position 
    transform.position = Vector3.SmoothDamp(transform.position, wantedPosition, ref moveVelocity, dampTime);  
} 

を上記円滑速度可変のSmoothDamp方式制御を与えることによって、プレーヤに従います。これは、あなたが現在の速度と湿った時間を保存するためのrefを与えていると仮定しています。

また、湿った時間を調整して、トランジションの滑らかさを変更することもできます。この機能は、自動的にプレイヤーの動きの中点を占めます。明確にするために

は、ドキュメントからの引用、上記でdampTimeは次のとおりです。

それが目標に到達するのにかかるおよその時間。値が小さいほどターゲットに速く到達します。

Quaternion.slerpを使用して、2つの回転の間を円滑に回転させることも検討してください。

+0

私のコードをhttps://hastebin.com/inupemituq.csに変更しました。ここではhttps://www.youtube.com/watch?v=nA3Pp4qOKwEのようになりました。だから問題はスムーズダンプの値が非常に高いときには吃音があるように見えますが、aとdを使った回転は非常に反応しません。 –

+1

湿った時間を一定のフロート値に設定してみてください。私は鉱山が0.2fに設定されており、うまくいくように見えました。 – user886

+0

一定値に設定すると、同じ振る舞いが発生するようです。 –

関連する問題