Collision detection system - List Based vs Interface - help needed

Hey folks, amateur programmer trying to set up a decent system for registering collisions and subsequent actions for my game.

Some important things i need to have the system do:
-Detect which NPC is the focus of the player
-call animations and methods for that NPC specifically
-Allow for additional future NPC’s with different animations/methods
-Detect hide spot player is focusing on
-Not register spot/NPC depending on bools/other criteria
-Call animations for an NPC in the hide spot

Initially i was using lists to track the objects in the scene that could be interacted with. This has been throwing errors for empty lists, as the things that should be in the lists only enter the lists when in collision with the player. These errors dont prevent it from functioning and stop once something populates the list, meaning that even with these errors that game is fully functional.

I then attempted to try using Interfaces, something i have only just learned existed, learning how to use them as i go. These have cleared up any of the issues i was having with errors for unpopulated lists, however i am now struggling to figure out how to properly reference certain things, such as which NPC is the focus of the player, as the list created by the interface detector is not exposed. This meant i couldnt figure out how to animations for a specific NPC using the hide spot.

So if anyone could suggest for me which of these options is better going forward, or if there is a better option i am not aware of i would greatly appreciate it.

List based code below.

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

public class PlayerCollision : MonoBehaviour
{
    public List<GameObject> focusClientList = new List<GameObject>();
    public List<GameObject> charmedClientList = new List<GameObject>() ;
    public List<GameObject> hidden = new List<GameObject>();

    public BusinessManMove bManMove,cManMove;
    public BusinesClientAnimControl bAnimCon,cAnimCon;
    public Animator businessAnim, charmedAnim;

    public HiddenActionTrigger hSpot;

    public bool follower;
    public bool hiddenHAct;
    [SerializeField]
    GameObject threePToggle;

    public ThreesomeToggle threeToggle;


    private void Start()
    {        
        follower = false;
        hiddenHAct = false;

        threeToggle = threePToggle.GetComponent<ThreesomeToggle>();

        bAnimCon = focusClientList[0].GetComponent<BusinesClientAnimControl>();
        bManMove = focusClientList[0].GetComponent<BusinessManMove>();
        businessAnim = focusClientList[0].GetComponent<Animator>();

        cAnimCon = charmedClientList[0].GetComponent<BusinesClientAnimControl>();
        charmedAnim = charmedClientList[0].GetComponent<Animator>();
        cManMove = charmedClientList[0].GetComponent<BusinessManMove>();


        hSpot = hidden[0].GetComponent<HiddenActionTrigger>();
        
        Debug.Log("found client script");
    }

    private void Update()
    {



        if (Input.GetKeyDown(KeyCode.Space) && follower != true)
        {
            if (focusClientList[0] && bAnimCon.action == false )
            {
                bAnimCon.LowValueAnim();
                bAnimCon.MidValueAnim();
                bAnimCon.HighValueAnim();
            }
            else
            {

            }
            
        }
        else if(Input.GetKeyDown(KeyCode.Space) && follower == true)
        {
            if (hSpot.hideYes && cAnimCon.action == false)
            {
                Debug.Log("HIDDEN START");

                hiddenHAct = true;
                cManMove.MoveToHidden();
                cAnimCon.LowValueAnim();
                cAnimCon.MidValueAnim();
                cAnimCon.HighValueAnim();
            }
            else
            {

            }
        }
        

        if (Input.GetKeyDown(KeyCode.F) && follower != true)
        {
            if (focusClientList[0] && bAnimCon.action == false)
            {
                bManMove.EndPatroll();
                bManMove.charmed = true;
                follower = true;
                Debug.Log("Following");
                charmedClientList.Add(focusClientList[0]);
                Debug.Log("charmed");
                cAnimCon = charmedClientList[0].GetComponent<BusinesClientAnimControl>();
                Debug.Log("Chanrmed Client Animation");
                charmedAnim = charmedClientList[0].GetComponent<Animator>();
                cManMove = charmedClientList[0].GetComponent<BusinessManMove>();
            }
        }
        else if (Input.GetKeyDown(KeyCode.F) && follower == true)
        {
            
        }

        if (follower && !threeToggle)
        {
            focusClientList.Remove(focusClientList[0]);
        }

    }

    public void OnTriggerEnter2D(Collider2D other)
    {

        if(other.gameObject.CompareTag("HiddenSpot"))
        {
            if(threeToggle.threesome != true)
            {
                hidden.Add(other.gameObject);
                hSpot = hidden[0].GetComponent<HiddenSexTrigger>();
            }
        }

        if (other.gameObject.CompareTag("Client"))
        {  
            focusClientList.Add(other.gameObject);

            bAnimCon = focusClientList[0].GetComponent<BusinesClientAnimControl>();
            bManMove = focusClientList[0].GetComponent<BusinessManMove>();
            businessAnim = focusClientList[0].GetComponent<Animator>();
            Debug.Log("added");
            
        }
       

    }

    public void OnTriggerStay2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Client"))
        {

            if (focusClientList[0])
            {
                if(follower == true)
                {
                    if(threeToggle.three == true)
                    {
                        bManMove.StopMove();
                    }
                    else if (threeToggle.three == false)
                    {

                    }
                }
                else if(follower == false)
                {
                    bManMove.StopMove();
                }


            }
        }

        if (other.gameObject.CompareTag("HiddenSpot"))
        {

        }



    }

    public void OnTriggerExit2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Client"))
        {
            if (other.gameObject == focusClientList[0])
            {
                focusClientList.Remove(focusClientList[0]);
                bManMove.RestartMove();
            }
            else
            {
                focusClientList.Remove(other.gameObject);
            }

        }

        if (other.gameObject.CompareTag("HiddenSpot"))
        {
            hidden.Remove(other.gameObject);
        }

    }

    
}

I use interface for this kind of functionality. I am making a game where multiple enemies will be spawned and your character will be able to hit them when they find one. i was also using list like you before to store the current enemy but it was more costly as i was adding and removing them upon death. So using an interface is better than just constantly adding and removing objects from list.

using UnityEngine;

public interface IAttackable
{
    public void TakeDamage(float p_damage);
    public void SetOriginalArmorValue();
    public void ReduceArmor(float p_reductionAmount);
    public Vector2 GetPosition();
    public RectTransform GetRectTransform();
    public BoxCollider2D Collider { get; }
    public TeamType Team {  get; }
    public CharacterType CharacterType { get; }
    public bool IsAlive {  get; }
}

so I just made a common interface for all enemies. When player detects an enemy it just checks if it is alive or not, if it is, that enemy becomes the current focus and then I break out of the the FindEnemy() function and run any attack function. I hope this helps you