正如标题所说,我想给予我的玩家一个临时的2倍乘数,然后在之后拿走它。到目前为止,我有一个按钮,他们点击设置他们当前的乘数x2,然后在10秒钟后拿走它,问题是如果他们在这段时间里购买了一个增加他们乘数的东西,这会把事情搞砸,我不知道如何处理。乘数在游戏开始时设置为1,可以通过购买“升级”来添加。
编辑:我有两个脚本,一个跟踪你有多少铁和你当前的点击乘数是什么,它也处理显示到屏幕上的文本,它被称为游戏管理器。
我的游戏有3个按钮,一个需要10铁,并给玩家加1到他们的点击乘数其他2做同样的事情,但需要更多的铁,并给一个更高的颠簸点击乘数。
然后,我添加了一个第4个按钮,当按下时,将给予玩家一个2倍,以他们的乘数为30秒(ex当前点击乘数是5后,按钮按下,现在是10后,30秒,它返回到5)
问题是,如果玩家点击2x按钮,然后购买1x点击乘数升级,他们不会保留他们在2x按钮协同程序中购买的那个。(ex当前点击乘数是1点击2倍按钮点击乘数现在是2然后购买1倍升级,所以点击乘数现在是3。30秒后,乘数应返回到2,但实际上返回到1,就好像他们从未购买过1x升级一样)
希望这能更好地解释我的问题。我试着在我的原始乘数中添加一个临时变量,然后使用mathf.ABS来计算出差异,然后做一些事情,但老实说,它开始把我搞糊涂了,所以我在这里寻求建议,哈哈,目前为止我的代码是:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TwoX: MonoBehaviour
{
[SerializeField] Button _TwoX;
void Start () {
Button btn = TwoX.GetComponent<Button>();
btn.onClick.AddListener(TaskOnClick);
}
void TaskOnClick(){
StartCoroutine(test());
}
IEnumerator test()
{
GameManager.Multiplier = GameManager.Multiplier * 2;
yield return new WaitForSeconds(10);
GameManager.Multiplier = GameManager.Multiplier / 2;
}
}
2条答案
按热度按时间guicsvcw1#
这里的主要问题是你阻塞了这个函数。一个更好的解决方案是在Update函数中取消乘数设置,并检查它已经持续了多长时间。
tyu7yeag2#
从我们的描述来看,
GameManager.Multiplier
听起来像是int
,因此步骤确实是1
* 2
=〉2
+ 1
=〉3
/ 2
=〉1
因为
int
除法不知道小数(如果它是float
,则结果将是1.5f
)。我将使用的技巧是根本不使用
*
和/
,而是使用+
和-
:这一次的步骤将是
1
* 2
"-〉实际上是+ 1
-〉2
+ 1
=〉3
/ 2
"-〉实际上是- 1
-〉2