.GetHashCode()
какой-то странной подход. Если уж хочешь получить из энума номер то касти его к инту. А вообще для того энум и заводят, чтобы избавиться от магических цифр 1,2,4GetComponent
и вынеси всё что нужно в [SerializeField]
FindObjectOfType()
на каждое изменение свойств это вообще зашквар, лагать должно неименоверно. Если нет у тебя GameManager как синглтона, ну хотя бы ищи его в сцене один раз на старте.