Variable having different value in different methods / carrying over value from last play

So basically what’s happening is when I start the game, score should be set to 0, and I’m printing it to be sure it is and it prints as 0 on start, but then once a point is scored and it goes up it suddenly picks up from where it left off the last game, if it was 14 last game now its 15 (currently its only increasing by 1 point) at one point I even set it to print score in FixedUpdate and it was constantly printing as 0 but then when i would score the single print would be higher, as if the different methods have different variables for the function

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  

public class gameLogic : MonoBehaviour  
    public float waveSpeed;  
    public int score;  
    public playerLaser PlayerLaser;  
    // Start is called before the first frame update  
    void Start()  
        waveSpeed = -0.3f;   
        score = 0;  
    // Update is called once per frame  
    void FixedUpdate()  
        waveSpeed = waveSpeed - 0.00001f;  
    public void enemyScore(int pointsUp)  
        score += pointsUp;  

Right now, any script could change the score variable on this script because it is public. Do you really need it to be public, if you like that you can see the value and change it in inspector I would recommend that you use SerializeField instead. You could write [SerializeField] private int score. Then we make sure that nothing changes the score from the outside. You often don’t want variables to be public like that because it could be harder to keep track on who changes the values and when. If you change it to SerializeField and having it private, the only way score can be changed is in this class or in the inspector. Another class could call on the “enemyScore” function but we could easily track on who does that by breakpointing. With that changed I would like to see how the script that calls on “enemyScore” looks like to be able to help more.