Singleton class or delegate?

Which is the best approach to call a function. Lets take an example of a car game.
Singleton class

GameManager is a singleton class and I have one more class called PlayerCar.

public class GameManager : MonoBehaviour {

	private static GameManager _instance;

	public CameraManager camera;
	public SoundManager sound;
	public UIManager ui;

	public static GameManager instance{
		get{
			if(_instance == null){
				_instance = GameObject.FindObjectOfType<GameManager>();
			}
			return _instance;
		}
	}

	public void CarDamage(){
		camera.Shake();
		sound.PlayDamage();
		ui.ShowDamageText();
	}
}



public class PlayerCar{

	private void OnDamageRecieved(){
		GameManager.instance.CarDamage();
	}

}

Now whenever playercar recieves damage OnDamageRecieved is called which in turn calls Gamemanagers CarDamage function.

Now let’s us take another method which is delegate and events

public class PlayerCar{

	public delegate void Damage();
	public static event Damage ShakeCamera;
	public static event Damage PlayDamageSound;
	public static event Damage ShowDamageText;

	private void OnDamageRecieved(){
		ShakeCamera();
		PlayDamageSound();
		ShowDamageText();
	}
}

public class CameraManager : MonoBehaviour{

	void OnEnable(){
		PlayerCar.ShakeCamera += Shake;
	}

	void OnDisable(){
		PlayerCar.ShakeCamera -= Shake;
	}

	private void Shake(){}
}


public class SoundManager : MonoBehaviour{

	void OnEnable(){
		PlayerCar.PlayDamageSound += PlayDamage;
	}

	void OnDisable(){
		PlayerCar.PlayDamageSound -= PlayDamage;
	}

	private void PlayDamage(){}
}

public class UIManager : MonoBehaviour{

	void OnEnable(){
		PlayerCar.ShowDamageText += ShowDamageText;
	}

	void OnDisable(){
		PlayerCar.ShowDamageText -= ShowDamageText;
	}


	private void ShowDamageText(){}
}

So which is the best approach of calling a function which is in some other class.

First option is better, because you have less static stuff and there is just a single class that knows about a structure of these relationships.

What you want to build in the end is something that is easy to modify. Statics are not that. They couple your code. Imagine you need to add an extra car (without camera shake) or add an extra effect. Which way is it easier to do?