Expanded explanation on Time.time?

Hello, this seems like a bit of a stupid question.
I have been doing the Unity tutorials so far, and I haven’t had any problems that I haven’t been able to solve on my own. Whenever I finish a lesson, I try to read and watch all the other videos or manuals that go into further detail about the things we used in the projects.

However, I’m having trouble understanding Time.time

the API has this example code:

using UnityEngine;
using System.Collections;

    public class ExampleClass : MonoBehaviour {
        public GameObject projectile;
        public float fireRate = 0.5F;
        private float nextFire = 0.0F;
        void Update() {
            if (Input.GetButton("Fire1") && Time.time > nextFire) {
                nextFire = Time.time + fireRate;
                GameObject clone = Instantiate(projectile, transform.position, transform.rotation) as GameObject;

I can understand what this does as a whole because I was able to test it myself, but I don’t understand how some of the parts come together.

So to my understanding, fireRate essentially makes us able to fire once every half second. But I don’t understand how nextFire works, and what values Time.time return? Does Time.time reset every frame? What do these values become as the game goes on? why do we set nextFire = Time.time + fireRate? I’m sorry if this question is vague or stupid, It’s just kind of confusing for me and I was hoping to maybe get an answer I could understand. Thank you.

Its an easy way of saying… “In ‘fireRate’ seconds from now”; as Time.time is the time, now.