How to make a number Whole after SmoothDamp ?

Hello, so I have my points Script, and I wanted to make it count smoothly like 188 189 190 as count.

And I have a problem trying to resolve this

Please try to help me out here. :slight_smile:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 
 public class ScoreManager : MonoBehaviour {
 
     Animator anim;
 
     public static int score;
 
 
     private float m_smoothScore;
     private float m_smoothScoreVelocity;
     private int m_displayedScore = -1;
 
 
 
     TextMeshProUGUI text;
 
     public static bool collected;
 
     public float min;
     public float max;
     public float t;
 
     void Awake()
     {
         text = GetComponent<TextMeshProUGUI> ();
         score = 0;
     }
 
     void Start()
     {
         anim = GetComponent<Animator> ();
         collected = false;
     }
 
     void Update () {
         //smooth score animation
         m_smoothScore = Mathf.SmoothDamp(m_smoothScore,(float)score,ref m_smoothScoreVelocity, 0.2f, Mathf.Infinity, Time.deltaTime);
 
         //display the text
         int toDisplay = (int)Mathf.Round(m_smoothScore);
         if (toDisplay != m_displayedScore) 
         {
             m_displayedScore = toDisplay;
             text.text = "Score: " + m_smoothScore;
         }
 
 
 
         //text.text = score + " PTS";
 
         if (score > 0) 
         {
             anim.SetBool ("Points", true);
         }
         if (collected == true) {
             t = Time.time;
             text.fontSize = Mathf.Lerp (min, max, t);
             collected = false;
         } else {
             t = Time.time;
             text.fontSize = Mathf.Lerp (max, min, t);
         }
     } 
 }

The issue is that to display a number you have to convert it to a string, and when you convert a float into a string, even if it equals an int, it will display values after the decimal (e.g. 1.0, or 1523.0).

There are various approaches to solve this, but the simplest and best in this case is the following:

int toDisplay = Mathf.RoundToInt(m_smoothScore);
text.text = "Score: " + toDisplay;

Don’t modify your m_smoothScore for the purpose of displaying it, because that will mess up your calculation. In general, try to separate mentally (and in the code as well) the logic and the display, always deriving the displayed values from the logical ones, and the displayed values never* modifying the logical ones (*there are always exceptions, but they are rare).

Btw, another issues you will have is that you use Time.time for the t parameter of lerping the font size… after the first second you will always start at maximum font size, because Time.time is the time since the start of the application. Instead, use Time.deltaTime when you are “blowing up” your score display, like this:

if (collected) { // you don't have to check if a bool variable equals true, it is implicit
     t += Time.deltaTime;
}
else {
    t -= Time.deltaTime;
}
text.fontSize = Mathf.Lerp(min, max, Mathf.Clamp01(t));