【问题标题】:Unity type racer团结型赛车手
【发布时间】:2017-10-21 13:50:49
【问题描述】:

我正在统一设计一个打字机游戏,其中玩家在田径 100 米冲刺中,他们打字越快,角色跑得越快。

我只是想知道我是否应该致力于获得一个在输入的每个正确字母之间完成的动画,或者制定一个算法来加速、减慢和暂停动画,具体取决于字母是否正确。

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

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    最初的想法

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

    解决方案

    在 Unity 中,处理时间有点困难,今年我和我的班级都遇到了问题。我们发现的最佳解决方案是在 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;
    }
    

    【讨论】:

    • 我在想类似的东西,但不明白如何将其转化为统一。我的想法是让每个句子都是一串字符,并将输入与每个字符进行比较。每秒每个正确的输入可以增加 10% 的移动速度,而移动速度在没有输入的情况下会衰减,并且在输入错误的情况下会显着减慢。
    • 是的,这听起来是个好主意。将其移至 Unity 时遇到什么麻烦?
    • 将其转换为伪代码,我将在统一内使用什么来测量时间?
    • 我只是要编辑我的原始答案并给你一些更详细的东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2013-06-04
    相关资源
    最近更新 更多