1. Не используйте множественного наследования от MonoBehavior:
class SomeBaseBehavior : MonoBehavior
{...}
class SomeConcreatBehavior : SomeBaseBehavior
{...}
Я вижу как минимум одну причину (если не ошибаюсь): методы Start, Update и прочие, судя по всему, не виртуальные.
2. Не называйте скрипты поведения в честь объектов (префабов и прочего). Скрипты поведения не должны быть привязаны к какому-то конкретному префабу
3. Для получения информации от "соседних скриптов" используйте SendMessage на своем gameObject или у родительского (gameObject.transform.parent).
4. Ну и наверно держите баланс между связностью скриптов между собой и производительностью. Т.е. кэшируйте вызовы
GetComponent<...>();
SendMessage(Wrap<T> valueRequest)
которых много. Кэширование самих объектов скрипта для меня пока под вопросом (кажется стоит этого избегать).
ЗЫ: возможно я в чем-то неправ, сам только начал активно знакомиться.