Я написал небольшой актив (редактор) для Unity. Это работает хорошо. Однако весь код был в едином поведении Monobehaviour, и я хотел разделить его на три дополнительных сценария, каждый из которых предназначен для определенного вида деятельности (чтение / запись файлов, управление объектами, управление навигацией). Таким образом, я столкнулся с методами Unity запрашивает доступ к данным в других скриптах (я пришел из Delphi с его простыми модулями).
Решение, которое я нашел, заключается в следующем: различные компоненты в инспекторе используют SendMessage для вызова методов в сценарии Target, а некоторые из этих методов вызывают другие методы в трех дополнительных сценариях. Три сценария не имеют доступа друг к другу, но должны совместно использовать переменные целевого сценария. Для этого в целевом скрипте:
[HideInInspector] public FileScript1 Script1;
[HideInInspector] public FileScript2 Script2;
[HideInInspector] public FileScript3 Script3;
public void Start () {
Script1 = FindObjectOfType (typeof(FileScript1)) as FileScript1;
Script2 = FindObjectOfType (typeof(FileScript2)) as FileScript2;
Script3 = FindObjectOfType (typeof(FileScript3)) as FileScript3;
}
и для доступа к другим скриптам я могу использовать Script1.myMethod.
В трех сценариях я создаю экземпляр
public FileTarget myTarget;
Наконец, мне нужно добавить три сценария в качестве компонентов сценария Target и перетащить объект FileTarget на каждый из Иерархии. Тогда я могу использовать [HideInInspector]. Таким образом, я также могу получить доступ к целевому скрипту.
Все это выглядело очень трудоемким, и я подумал об использовании статических классов для трех сценариев вместо Monobehaviour (эти три сценария не являются объектами в иерархии).
Но помимо того, что нет необходимости создавать экземпляры трех сценариев в сценарии Target, мне все еще нужно создать экземпляр сценария назначения в трех сценариях и добавить их в качестве компонентов Target.
Я определенно не хочу просить вас преподавать программирование, но не могли бы вы дать мне лучший способ сделать это?
Спасибо