我希望我的增强工作在游戏开始时从0开始。
在游戏中,我可以捡起增强币来填充增强罐。
public static int boost;
private void OnTriggerEnter2D(Collider2D otherObject)
{
if (otherObject.tag == "Boost")
{
boost++;
GetComponent<AudioSource>().PlaySound(BoostSound, 5.7F);
Destroy(otherObject.gameObject);
}
}
玩家拿起足够的助推硬币后,即可在2d载具中使用助推器。
您至少需要3次增强才能启动增强器。每个辅助硬币等于辅助的1秒。
我只希望玩家能够收集到3个以上的增强币,如果它们有3个或更多表示可以使用增强的秒数,就可以使用增强器。
按钮呼叫代码
public void BoostButton()
{
StartCoroutine("Use_VehicleBoost");
}
按钮调用的增强代码。
IEnumerator Use_VehicleBoost()
{
// Check which boost package player picked
int boostLevel = SecurePlayerPrefs.GetInt("BoostLevel");
if (boostLevel == 0)
{
Debug.Log("Boost Level: None");
yield return null;
}
else if (boostLevel == 1)
{
Debug.Log("Boost Level: 1");
float aceleRate = 400, maxFWD = -2500;
while (Player.boost >= 3)
{
vehicleController.GetComponent<CarMovement>().accelerationRate += aceleRate;
vehicleController.GetComponent<CarMovement>().maxFwdSpeed += maxFWD;
// Meant to slowly take one point/ Time second away from boost tank
Player.boost = Player.boost - Mathf.RoundToInt(Time.deltaTime);
}
if (Player.boost <= 0)
{
yield return null;
}
}
yield return null;
}
问题:代码停留在while循环中,因此Unity冻结。它永远无法逃脱循环,但是如果循环运行时我如何使用deltaTime调用--boost。
答案 0 :(得分:0)
如果要使用while循环进行检查,请将其用于IEnumerator中并等待每一帧。例如:
.exe
答案 1 :(得分:0)
我通过在更新中设置一个布尔值来实现,当激活该异能时翻转为true,而当条件不再满足时翻转为false。当布尔值翻转为true时,也可以调用该方法来保持所需的行为。我实际上遇到了与您相同的问题,但没有意识到收益回报为零是解决方案,所以这就是我想出的。
if (ultCharge >= pilotUltMin && !pilotUlting && !pilotUltingPressed)
{
if (Input.GetButton(bumperR1))
{
pilotUltingPressed = true;
pilotUlting = true;
curCharge = ultCharge;
pilotUltingPressed = false;
}
}
if (pilotUlting)
{
PilotUlt();
}
}
private void PilotUlt()
{
if (ultCharge > curCharge - pilotUltMax && ultCharge >= 0)
{
rb.AddRelativeForce(Vector2.up * SwitchController.ShipSpeed * 1.5f, ForceMode2D.Impulse);
ultCharge -= 0.7f;
ultExhaust1.SetActive(true);
ultExhaust2.SetActive(true);
}
else
{
pilotUlting = false;
ultExhaust1.SetActive(false);
ultExhaust2.SetActive(false);
}
}