按下按钮时更改射速
Changing the fire rate while button pressed
我现在在使用 C# 的 Unity 上有一个 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 中即可:
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
获取射速。
顺便说一下,我觉得你的power up功能够用了。
但是协程的使用方式并不是correct.Don不要对同一个函数多次调用InvokeRepeating
if (Input.GetKeyDown(KeyCode.Space)){
InvokeRepeating("Fire", 0.000001f, fireRate);
}
相反,您应该使用布尔值来控制火灾何时开始。
if (Input.GetKeyDown(KeyCode.Space)){
fireData.Firing = true;
}
if(fireData.Firing)
{
InvokeRepeating("Fire", 0.000001f, fireRate);
}
还记得通过 StopCoroutine
添加停止触发的逻辑。
我现在在使用 C# 的 Unity 上有一个 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 中即可:
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
获取射速。
顺便说一下,我觉得你的power up功能够用了。
但是协程的使用方式并不是correct.Don不要对同一个函数多次调用InvokeRepeating
if (Input.GetKeyDown(KeyCode.Space)){
InvokeRepeating("Fire", 0.000001f, fireRate);
}
相反,您应该使用布尔值来控制火灾何时开始。
if (Input.GetKeyDown(KeyCode.Space)){
fireData.Firing = true;
}
if(fireData.Firing)
{
InvokeRepeating("Fire", 0.000001f, fireRate);
}
还记得通过 StopCoroutine
添加停止触发的逻辑。