如何使用曲线平滑地弯曲Horizo​​ns?

时间:2016-07-31 05:39:56

标签: c# unity3d unity5 curves curvesmoothing

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

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

以上代码是我试图随意更新左右弯曲量的代码。

1 个答案:

答案 0 :(得分:2)

这是你想要做的吗? Visual representation of the desired effect

在这种情况下,我认为你不能使用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;
}

然后将曲线输入到您的函数中。