【发布时间】:2017-10-21 13:50:49
【问题描述】:
我正在统一设计一个打字机游戏,其中玩家在田径 100 米冲刺中,他们打字越快,角色跑得越快。
我只是想知道我是否应该致力于获得一个在输入的每个正确字母之间完成的动画,或者制定一个算法来加速、减慢和暂停动画,具体取决于字母是否正确。
以前有没有人有过类似的经历? 另外,对于统一来说,我只是使用 Ethan 作为我的模型的标准资产,这是正确的做法吗?
【问题讨论】:
标签: unity3d unityscript
我正在统一设计一个打字机游戏,其中玩家在田径 100 米冲刺中,他们打字越快,角色跑得越快。
我只是想知道我是否应该致力于获得一个在输入的每个正确字母之间完成的动画,或者制定一个算法来加速、减慢和暂停动画,具体取决于字母是否正确。
以前有没有人有过类似的经历? 另外,对于统一来说,我只是使用 Ethan 作为我的模型的标准资产,这是正确的做法吗?
【问题讨论】:
标签: unity3d unityscript
您可以让每个正确的字符类型都加快字符的动画速度,并每毫秒缓慢滴答(即,如果您不打字,则放慢速度)。然后当用户输入错误的字符时,动画会变得越来越慢(每次都是之前的 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;
}
【讨论】: