что ответ троллингара говорит о Debug.Log
правильно.
Использование [SerializeField]
может рассматриваться как грязный и ленивый взлом для некоторыхлюди.Поскольку у него есть побочный эффект, он теперь сериализован , это означает, что значение хранится в активах.Это неплохо, но если вы точны, этого не следует делать с полями, которые все равно будут изменены во время выполнения.
Вместо этого вы можете просто зайти в Инспектор, открыть контекстное меню и установить его на Debug
В режиме
![enter image description here](https://i.stack.imgur.com/C5eMO.png)
это заставляет Инспектора не использовать пользовательские сценарии EditorScripts, а вместо этого отображать все закрытые поля (типов Serializable
).
Например, для компонента Transform
![enter image description here](https://i.stack.imgur.com/g3oJ8.png)
Однако этот способ более эффективен, чем использование метода Update
с флагом вообще будет скорее использовать Coroutines
.
Сопрограммы можно запускать и запускать параллельно (каждый кадр сразу после) метод Update
, но преимущество: когдасопрограмма завершена - она завершена и не продолжает проверять флаг bool
каждый кадр.
Поэтому всякий раз, когда вы выбираете PowerUp вместо установки флага на true
, лучше использовать
StartCoroutine(PowerUpRoutine());
и реализовать такую подпрограмму, как
private IEnumerator PowerUpRoutine()
{
isDoublePoints = true;
while(powerUpTimer > 0)
{
// Countdown the timer with update time
powerUpTimer -= Time.deltaTime;
//Debug.Log("TIMER ISS " + powerUpTimer);
// yield in simple words makes Unity "pause"
// the execution here, render this frame and continue from here
// in the next frame
yield return null;
}
// End of power up time
isDoublePoints = false;
}
public void OnPickPowerUp(float buffTime)
{
powerUpTimer += buffTime;
// avoid concurrent routines
if(!isDoublePoints) StartCoroutine(PowerUpRoutine());
}
В порядкечтобы отобразить его в своей игре, вы можете использовать Text
или TextMeshPro
и установить текст, например,
[SerializeField] private Text _text;
private IEnumerator PowerUpRoutine()
{
isDoublePoints = true;
while(powerUpTimer > 0)
{
// Countdown the timer with update time
powerUpTimer -= Time.deltaTime;
//Debug.Log("TIMER ISS " + powerUpTimer);
// set the text of the Text component to display the value
// for the $ symbol google for "c# string interpolation"
_text.text = $"TIMER IS {powerUpTimer:00.00}";
// yield in simple words makes Unity "pause"
// the execution here, render this frame and continue from here
// in the next frame
yield return null;
}
// End of power up time
isDoublePoints = false;
}