按下按钮时改变点火率
问题描述:
现在我在Unity上使用C#进行2D射击游戏,并且当它获得加电项目时,我想增加5秒的发射速率。它有点不错,但是当船开机时,火焰速率不会改变,直到按钮被释放并再次按下。即使在按下按钮时,是否有办法在启动时立即更改火率?此外,功率增加功能是我想出来的,如果有更好的方法来开启功能,那也是非常有用的。感谢提前:)按下按钮时改变点火率
void Update(){
if (Input.GetKeyDown(KeyCode.Space)){
InvokeRepeating("Fire", 0.000001f, fireRate);
}
}
void PowerUp()
{
Upgrade = true;
timeLeft = +5f;
if (Upgrade == true)
{
fireRate = 0.1f;
}
if (timeLeft <= 0)
{
Upgrade = false;
fireRate = 0.5f;
}
}
答
你应该传递一个引用类型的Fire
协程,而不是float
fireRate。
只是包装fireRate
一类应该工作:
class FireData
{
public float fireRate = 0.1;
}
然后在你的脚本,
FireData fireData = new FireData { fireRate = 0.5f };
void Update(){
if (Input.GetKeyDown(KeyCode.Space)){
InvokeRepeating("Fire", 0.000001f, fireData);
}
}
void PowerUp()
{
Upgrade = true;
timeLeft = +5f;
if (Upgrade == true)
{
fireData.fireRate = 0.1f;
}
if (timeLeft <= 0)
{
Upgrade = false;
fireData.fireRate = 0.5f;
}
}
在Fire()
协同程序,使用该fireData.fireRate
得到fireRate。
顺便说一下,我认为你的功能已经足够好了。
但是使用协程的方式是不正确的。不要在相同的函数上多次调用InvokeRepeating
。
if (Input.GetKeyDown(KeyCode.Space)){
InvokeRepeating("Fire", 0.000001f, fireRate);
}
相反,您应该使用bool值来控制火灾何时开始。
if (Input.GetKeyDown(KeyCode.Space)){
fireData.Firing = true;
}
if(fireData.Firing)
{
InvokeRepeating("Fire", 0.000001f, fireRate);
}
还记得添加一个逻辑来通过StopCoroutine
停止射击。
对不起,我正忙于其他的东西,直到现在我都无法做出改变。也花了我一段时间来了解如何使用协程。 感谢您的帮助和描述性解释! – Raggy