Unity型赛车手

Unity type racer

我正在统一设计一款打字赛车游戏,玩家在 100 米短跑中打字越快,角色跑得越快。

我只是想知道我的目标是获得一个在每个正确输入的字母之间完成的动画,还是制定一个算法来根据字母是否正确来加速、减慢和暂停动画。

有没有人以前有过类似的经历? 另外,作为统一的新手,我只是使用 Ethan 的标准资产作为我的模型,这是正确的做法吗?

最初的想法

您可以拥有它,以便每个正确的字符类型都会加快角色的动画速度,并在每经过一毫秒时缓慢滴答(即,如果您不打字,则减慢速度)。然后,当用户输入错误的字符时,动画会变得越来越慢(每次都是之前的 1/10(?))。

解决方案

在 Unity 中,处理时序有点困难,我的 class 和我今年都遇到了问题。我们找到的最佳解决方案是在 FixedUpdate 循环本身内工作,因为这是 运行 在比 Update.

更简洁的时间范围内

例子

我的解决方案(以及我们最终所做的)是更新 FixedUpdate 中的时间并在 Update

中使用它
void FixedUpdate() {
    if (timer >= 12f) stopped = true;
    if (!stopped) timerDT = updateTimer(Time.deltaTime);
}

如果定时器变量大于12(秒)则停止运动。 如果没有停止,则继续更新并添加到计时器,并将帧时间返回给 timerDT

void Update() {
    this.transform.translate(velocity * timerDT);
}

这将 运行 并根据 FixedUpdate

中给定的速度和时间范围更新附加的游戏对象

对于你,我会让脚本将动画控制器保存为脚本中的变量:

Controller animation = {animation controller};

注意:不记得这里需要放什么,但我很确定是控制器

然后你可以像这样改变动画:

void Update() {
    update_animation(timerDT, anim_speed);
}

void FixedUpdate() {
    timerDT = updateTimer(Time.deltaTime);
    if (timerDT - oldDT > 0.1) {
        oldDT = timerDT;
        anim_speed = anim_speed / 0.1; // for decreasing speed
    }
}

void update_animation(float deltatime, float speed) {
    animation["run"].speed = anim_speed;
}