How to make a system that will let elements interact with other elements?

I already have the hand states setup now but I need to get them working with other things in the scene. Like ice is melted when the fire hand comes near it, when ice is near water it freezes etc.

One way is something like this:

void Update()
{
    if ((firehand.transform.position - ice.transform.position).sqrMagnitude < 0.1f)     
    {
        StartCoroutine(MeltingIce());
    }
}

and you define the MeltingIce IEnumerator someway else in the file.

Or you could use an animation system, so instead do something like this:

void Update()
{
    if ((firehand.transform.position - ice.transform.position).sqrMagnitude < 0.1f) 
    {
        ice.gameObject.GetComponent<Animator>().SetTrigger("melting");
    }
}

Just a couple of ideas