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