This question was 
             closed 3 days ago by 
             Karma_XX for the following reason: 
             
 
            The question is answered, right answer was accepted
(solved) How to stop a void
(I'm new to coding and to Unity) The following code keeps on repeating the PasteClicked void even tho I clicked the button to start CopyClicked void. I would like that my code start the PasteClicked or CopyClicked void only once and if the button is reclicked it re-start it only once.
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 
 public class AddorCopy : MonoBehaviour
 {
     public Button paste;
     public Button copy;
     public Material presets1;
     public Material presets2;
     public Material presets3;
     public Material presets4;
     public Material presets5;
     public Material presets6;
     public Material Base_material;
     public Button button1;
     public Button button2;
     public Button button3;
     public Button button4;
     public Button button5;
     public Button button6;
 
     public void Start()
     {
         paste.onClick.AddListener(PasteClicked);
         copy.onClick.AddListener(CopyClicked);
 
         void PasteClicked()
         {
             button1.onClick.AddListener(one);
             button2.onClick.AddListener(two);
             button3.onClick.AddListener(three);
             button4.onClick.AddListener(four);
             button5.onClick.AddListener(five);
             button6.onClick.AddListener(six);
             void one()
             {
                 presets1.CopyPropertiesFromMaterial(Base_material);
             }
             void two()
             {
                 presets2.CopyPropertiesFromMaterial(Base_material);
             }
             void three()
             {
                 presets3.CopyPropertiesFromMaterial(Base_material);
             }
             void four()
             {
                 presets4.CopyPropertiesFromMaterial(Base_material);
             }
             void five()
             {
                 presets5.CopyPropertiesFromMaterial(Base_material);
             }
             void six()
             {
                 presets6.CopyPropertiesFromMaterial(Base_material);
             }
         }
 
         void CopyClicked()
         {
             button1.onClick.AddListener(one);
             button2.onClick.AddListener(two);
             button3.onClick.AddListener(three);
             button4.onClick.AddListener(four);
             button5.onClick.AddListener(five);
             button6.onClick.AddListener(six);
             void one()
             {
                 Base_material.CopyPropertiesFromMaterial(presets1);
             }
             void two()
             {
                 Base_material.CopyPropertiesFromMaterial(presets2);
             }
             void three()
             {
                 Base_material.CopyPropertiesFromMaterial(presets3);
             }
             void four()
             {
                 Base_material.CopyPropertiesFromMaterial(presets4);
             }
             void five()
             {
                 Base_material.CopyPropertiesFromMaterial(presets5);
             }
             void six()
             {
                 Base_material.CopyPropertiesFromMaterial(presets6);
             }
 
         }
     }
 
 }
 
              
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by Hellium · Jun 05 at 09:32 PM
ADDING a listener, as its name suggests, ADDS a listener. It does not remove the previous callbacks.
I also recommend you taking advantage of arrays and classes to tidy your code up.
CODE NOT TESTED
 public class AddorCopy : MonoBehaviour
 {
     public Button paste;
     public Button copy;
     public Material baseMaterial;
     public MaterialPresetButton[] materialPresetButtons;
 
     void Start()
     {
         paste.onClick.AddListener(PasteClicked);
         copy.onClick.AddListener(CopyClicked);
 
         for(int i = 0 ; i < materialPresetButtons.Length ; ++i)
         {
             materialPresetButtons[i].Setup(baseMaterial);
         }
     }
 
     void PasteClicked()
     {
         for(int i = 0 ; i < materialPresetButtons.Length ; ++i)
         {
             materialPresetButtons[i].SwitchToPasteMode();
         }
     }
 
     void CopyClicked()
     {
         for(int i = 0 ; i < materialPresetButtons.Length ; ++i)
         {
             materialPresetButtons[i].SwitchToCopyMode();
         }
     }
 }
 
 [System.Serializable]
 public class MaterialPresetButton
 {
     [SerializeField] private Button button;
     [SerializeField] private Material preset;
     private Material baseMaterial;
     private Material source;
     private Material target;
 
     public void Setup(Material baseMaterial)
     {
         this.baseMaterial = baseMaterial;
 
         button.onClick.AddListener(CopyMaterialProperties);
 
         SwitchToCopyMode();
     }
 
     public void SwitchToCopyMode()
     {
         source = baseMaterial;
         target = preset;
     }
     
     public void SwitchToPasteMode()
     {
         source = preset;
         target = baseMaterial;
     }
 
     private void CopyMaterialProperties()
     {
         target.CopyPropertiesFromMaterial(source);
     }
 }
 
              Thank you a lot it works! you saved me :D (the line 56-57 and 62-63 are inverted but I fixed it)