0

私はしばらくエンドレス ランナー ゲームを開発してきましたが、地下鉄の表面のように水平線をランダムに曲げる環境を試してみたいと思いました。ストアからこのHorizo​​n Bendingアセットをダウンロードすると、美しく機能します。アセットには、ApplyCurvature(float val)それをシーンに適用し、必要な量を曲げるというメソッドがあります (現在は左のみにカーブしていますApplyCurvature(5f);)。

左、中、右などの曲率をランダムに変更したい。ゲームの各フレームに曲率を適用できることを確認するためだけに Random メソッドを試しましたが、それは私が望むものではありません。Unity スクリプトで提供される曲線を使用することを考えましたが、それらを適用する方法がわかりません。誰でもこれについて私を助けることができますか? Unity3d は初めてなので、ダウンロードしたアセットにカーブを使用してエフェクトを適用するにはどうすればよいですか。助けていただければ幸いです。

using Battlehub.HorizonBending; //the asset package import

private float hb;

void Update () 
    {

        //HB.ApplyCurvature(5);
        if (playerTransform.position.z - safeZone > (spawnZ - amtOfTilesOnScreen * tileLength))
        {
            if (activeTiles.Count < (NumberOfTilesThatFitOnScreen + 1))
            {
                var spawnedTile = SpawnTileAtFront();

                activeTiles.Add(spawnedTile);
            }
            else
            {
                var movedTile = activeTiles[0];
                MoveTileToTheFront(movedTile);
                activeTiles.RemoveAt(0);
                activeTiles.Add(movedTile);
                //HB.ApplyCurvature(5);

                hb = Random.Range(-5, 5); //Randomly bend road left and right
                HB.ApplyCurvature(hb);
            }
        }
    }

上記のコードは、曲げ量を左右にランダムに更新しようとしたものです。

4

1 に答える 1

2

これはあなたがやろうとしていることですか? 望ましい効果の視覚的表現

その場合、目的の効果に ApplyCurvature 関数を使用できないと思います。私の推測では、二次方程式を作成し、k値を変更してグラフを曲げていると思います。例: https://www.desmos.com/calculator/djv3r9enl3 (k スライダーを使用して何が起こるかを確認してください)

Unity のカメラ エフェクトがどのように機能するかについてはほとんど何も知りませんが、グラフについてはいくつか知っています。関数から地平線の外観を変更する方法を理解できる場合、これらは便利なはずです。

左: k * x^2 + sP

ここで、k = (tP - sP) / t^2

中央: k * x^2

k は目的の値です

右: k * (t - x)^2 + tP

ここで、k = (sP - tP) / t^2

k:「曲率」

t: ターゲット x (画面の右側)

sP: 開始位置 y (最下点)

tP: 目標位置 y (最高点)

これが何かの助けになることを願っています。

編集:

値を徐々に減らすには、タイマーを作成して Time.deltaTime を使用します。

そのようです:

float curveTimer = 0;
float curve;

void Start() {
}

void Update () {
    if (curveTimer < yourTargetTime)
        curveTimer += Time.deltaTime;
    else
        curveTimer = 0;

    curve = 5 - (curveTimer / yourTargetTime) * 10;
}

次に、曲線を関数に入力します。

于 2016-07-31T08:09:15.300 に答える