0

我一直在开发一个无尽的跑步游戏,我希望它尝试让环境像地铁表面一样随机弯曲地平线。我从商店下载了这个地平线弯曲资产,效果很好。在资产中,我有一个名为的方法ApplyCurvature(float val),它将它应用到场景中并弯曲所需的量(现在它只向左弯曲ApplyCurvature(5f);)。

我希望它随机改变曲率,如左、中或右。我确实尝试了 Random 方法,只是为了确保我可以为游戏中的每一帧应用曲率,但这不是我想要的。我考虑过使用统一脚本给出的曲线,但我不知道如何应用它们。谁可以帮我这个事?我是 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 滑块查看会发生什么)

我对统一的相机效果如何工作几乎一无所知,但我确实知道一些关于图表的事情。如果你能弄清楚如何从一个函数中改变地平线的外观,这些应该很方便:

左: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 回答