То, о чём вы говорите - не столько оптимизация игры, сколько рефакторинг проекта. Для начала можете попробовать обобщить логику насколько это возможно, используя ООП. Например, если у вас есть помидор, который можно взять и кнопка, на которую можно нажать, то вам достаточно всего одного скрипта с рейкастом, 'Interactor', который будет по рейкасту искать 'Interactable' цель. Но на самом деле целью будет Tomato или Button, которые наследуют Interactable и его базовые методы, например, Interact(), который будет вообще по-разному реализован, но запускаться будет одинаково. А если вы захотите добавить возможность садиться в автомобиль, то сделаете всё через тот же скрипт.
В процессе вы также можете вооружиться паттернами, например, SOLID, и строить проект наперёд так, чтобы в будущем было легче добавлять новый функционал и он не ломал старый.