0

さまざまな方法を試しましたが、カメラの動きを完全に滑らかにすることはできませんでした。非常に単純なシーンでも、カメラ フォローが十分ではありません。スパイクの動きがあります。スパイクは定期的に発生するのではなく、ランダムに発生します。Unity で作られた完璧なカメラ フォローを備えたゲーム (Manuganu など) を知らなかったら、それは不可能だと思います。

これまでに試したこと: -LateUpdate/FixedUpdate でカメラの位置を変更します。-ターゲットを内挿/外挿しました。-Deltatimeに応じてカメラを移動。-物理ステップの増加。-ターゲットフレームレートを 60 に設定します。 -すべての品質設定、Vsync などで再生します。 -多くのバリエーションとその他のもの...

最良のシナリオは、ランダムな問題です...モバイルとエディターの両方で発生します。Unity のサンプル スクリプトも完全にスムーズに動作するわけではありません。このしゃっくりの問題のため、横スクロール ランナー ゲームの開発を続けることができません。

問題は、私が言及しなかった方法はありますか、インターネット上に例はありますか? できることはすべてやりました。

transform.position = new Vector3(target.x, target.y, -10);

これが、LateUpdate でカメラの位置を更新する方法です。

PS: FPS ドロップの問題はありません。

4

2 に答える 2

1

@Kashbelにはその半分があります。固定の移動値を使用していますが、すべてのフレームが同じ量の現実世界の時間を取るという保証はありません。1 秒あたりの単位が一定であることを確認する必要があります。つまり、更新の速度を制御するために時間を使用する必要があります。

これを処理する一般的な方法は、 を使用することTime.DeltaTimeです。これは常に、フレームの実世界の長さを秒単位で表す小さな分数です。たとえば、ドキュメントのように:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        float translation = Time.deltaTime * 10;
        transform.Translate(0, 0, translation);
    }
}

ここで、スクリプトは、フレームレートに関係なく、毎秒10 単位で gameObject を移動します。がないと、Time.deltaTime1 つのフレームで 1/60 秒で 10 単位移動する可能性がありますが、特に遅いフレームでは 1/15 秒で 10 単位移動する可能性があります。

于 2014-10-30T01:53:52.183 に答える
0

Lerpを直接移動する代わりに、関数を使用してみてくださいtransform.position

それは次のようなものになりますtransform.position = Vector3.Lerp(startPosition, endPosition, time);

これを使うとスムーズになるはずです。Vector3.Lerp Unity3Dに詳細と例があります

于 2014-10-29T23:20:00.607 に答える