I’m pretty sure this is possible, but I just don’t know what to search for when surfing the web 
I have a script called ZoneBehaviour.cs and one that’s called MusicScript.cs.
ChangeMusic.cs is a part of my player character and the ZoneBehaviour.cs is attached to a trigger placed on my level. When my player enter the trigger the music will change if bool InZone = true in ZoneBehaviour.
ZoneBehaviour.cs:
using UnityEngine;
using System.Collections;
public class ZoneBehaviour : MonoBehaviour
{
private GameObject player;
private MusicScript musicScript;
public bool InZone = false;
void Awake()
{
player = GameObject.FindGameObjectWithTag(Tags.player);
musicScript = GameObject.FindGameObjectWithTag(Tags.gameController).GetComponent<MusicScript>();
}
void OnTriggerEnter(Collider other)
{
if(other.gameObject == player)
{
InZone = true;
}
}
}
MusicScript.cs:
using UnityEngine;
using System.Collections;
public class MusicScript : MonoBehaviour
{
public float musicFadeSpeed = 2f;
private AudioSource actionMusic;
private ZoneBehaviour zBehave;
void Awake()
{
actionMusic = transform.Find("ActionMusic").audio;
}
void Update()
{
MusicFading();
}
void MusicFading()
{
}
}
In the function MusicFading in the MusicScript.cs I want to perform actions if InZone in ZoneBehaviour is true. But I don’t know how… 
in MusicScript.cs, how are you assigning zBehave?
Once that points at an instance of ZoneBehaviour, it should be as easy as
if (zBehave.InZone == true)
{
}
I got it to work now…
But… 
I have a OnTriggerLeave function in ZoneBehaviour.cs now that will make InZone = false and this code in MusicScript.cs:
void MusicFading()
{
if(zBehave.InZone)
{
audio.volume = Mathf.Lerp(audio.volume, 0f, musicFadeSpeed * Time.deltaTime);
actionMusic.volume = Mathf.Lerp(actionMusic.volume, 0.5f, musicFadeSpeed * Time.deltaTime);
}
else
{
audio.volume = Mathf.Lerp(audio.volume, 0.5f, musicFadeSpeed * Time.deltaTime);
actionMusic.volume = Mathf.Lerp(actionMusic.volume, 0f, musicFadeSpeed * Time.deltaTime);
}
}
When entering the trigger the music change… but when leaving the trigger just won’t do anything?
Oops… there was no OnTriggerLeave…
So… how can I implement this?
Cough Read… The… Cough documentation…
Cough… OnTriggerExit… Cough
It’s void OnTriggerExit(Collider other) 
Hårda ord från en Torktumlare 
Sorry for the swedish now guys.
Kollade igenom ditt skript och det såg väl bra ut, men en sak man kan tänka på är att alla funktioner som heter FindObjectBy är skapligt resurskrävande. Tänk själv när du åker in och ut ur en trigger så måste den göra en sökning.
Låt oss säga att du har 100-tals kanske 1000-tals objekt och motorn måste då göra en sökning varje gång efter taggen så fort triggern vaknar.
Man ska vara sparsam med fina FindObject-metoder och om du vet vem det är som ska äntra trigger. Exempelvis enbart din Player. Så kan du istället direkt hänvisa till player genom
Public GameObject player;
Och sedan dra in och släppa playerobjektet på parametern i inspectorn.
Annars är den absolut mest snåla komunikationen mellan object är “messaging” do objekt skickar meddelanden till andra. Då du istället skriver en slags “musichandler” som är ett eget objekt(skript) som har hand om ALL musik i spelet enbart.