RigidBody2D.velocity inconsistant

Here is the simple test.

test

My player (the white square) moves on a horizontal axis to the left for this test. Here is the code for that

horizontalMove = Input.GetAxisRaw("Horizontal");
        m_Rigidbody2D.velocity = new Vector2(horizontalMove * speed * Time.deltaTime, m_Rigidbody2D.velocity.y); 
    Debug.Log(m_Rigidbody2D.velocity.x * Time.deltaTime);  

As you can see in the console I have 273 different velocity values for the ~4 seconds of left movement and can’t get a consistent time.

Here is the timer script also. The timer start code is in the movement script, the same one as above

if (m_Rigidbody2D.velocity != Vector2.zero) //timer start
            timerStart = true;

timer script:

public class timer : MonoBehaviour
{
    public Text timerText;
    private float startTime;
    string seconds;
    public bool finish;
    private float time;
    private float finishComparable;
    public prefInit scores;
    public Movement player;
    private bool activeTimer;

    void Start()
    {
        startTime = Time.time; //time since beginning of this frame
    }

    void Update()
    {        
        if (finish) //------------check if current time is lower than playerpref time
            return;        
        else if (!finish && activeTimer)
        {
            string minutes = ((int)time / 60).ToString();  //update minutes for time
            int minutes_int = ((int)time / 60);
            float seconds1 = (time % 60);  //temporary time variable for easy comparison
            if (seconds1 < 10)
            {
                seconds = "0" + seconds1.ToString("f3");   //update if seconds is less than 10 for the extra 0
            }
            else
            {
                seconds = seconds1.ToString("f3");  //updates seconds for time
            }
            time += Time.deltaTime;  //sets local time value to ingame time
            finishComparable = (minutes_int * 60) + seconds1;
            timerText.text = minutes + ":" + seconds;  //sets screen timer text to ingame time
        }
        else if (player.timerStart)
        {
            activeTimer = true;
        }
    }
    public void Finish()
    {
        finish = true;                
        PlayerPrefs.SetFloat("composite", (PlayerPrefs.GetFloat("composite") + finishComparable));
        Debug.Log(PlayerPrefs.GetFloat("composite"));
        if (PlayerPrefs.GetInt("sceneIndex") == 2)
            PlayerPrefs.SetFloat("level1", 1);
        else if (PlayerPrefs.GetInt("sceneIndex") == 3)
            PlayerPrefs.SetFloat("level2", 1);
        else if (PlayerPrefs.GetInt("sceneIndex") == 4)
            PlayerPrefs.SetFloat("level3", 1);
        else if (PlayerPrefs.GetInt("sceneIndex") == 5)
            PlayerPrefs.SetFloat("level4", 1);
        Debug.Log(finishComparable);
        Composite();
    }
    private void Composite()
    {
        bool lvl1 = (PlayerPrefs.GetInt("level1") != 0);
        bool lvl2 = (PlayerPrefs.GetInt("level2") != 0);
        bool lvl3 = (PlayerPrefs.GetInt("level3") != 0);
        if (lvl1 && lvl2 && lvl3)
            scores.UpdateScore();
    }
}

I understand that this script is poorly written; this is my first game

  1. You will never get exactly the same values due to floating point precision
  2. Time.DeltaTime is not a constant, it changes from frame to frame, so when you are multiplying something by it, you will not get the same values every frame
  3. You may have things like drag, changing your velocity

That’s mostly it I think