How can i change a text value from multiple prefabs?

I have a class that i use for interactable objects:

public abstract class Interactable : MonoBehaviour{
    public abstract void interact();
    public abstract string getInteractString();

I extend this class in my chest script:

public class ChestScript : Interactable {

    Transform player;
    public GameObject pCanvas;
    public Text cText;

    // Start is called before the first frame update
    void Start() {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        pCanvas = GameObject.Find("PlayerCanvas");
        cText = pCanvas.transform.Find("InteractText").GetComponent<Text>();

    public override void interact() {
    public override string getInteractString() {
        return "Interact - Open chest";

    private void Update() {
        if (Vector3.Distance(gameObject.transform.position, player.position) < 15f) {
            cText.text = getInteractString();
        } else {
            cText.text = "";

And the idea is that i change the text depending on the interactable, but the text change happens only when approaching one chest prefab. The text changes as it should, but only when getting close to(or getting far enough away from) one instance of the chest, the rest completely ignore the if statement in the Update function.
Am i missing something? Can you not change a canvas’ text property from multiple prefabs?

Fixed using OnTriggerEnter/OnTriggerStay/OnTriggerExit, and a trigger collider around the chest. Still have no idea what was wrong before. If anyone sees what I’m missing, feel free to leave a message.