【发布时间】:2019-01-25 21:10:53
【问题描述】:
我为 Unity 编写了一个小资产(编辑器)。它运作良好。然而,所有的代码都在一个单一的 Monobehaviour 中,我想把它分成三个额外的脚本,每个脚本都用于某种类型的活动(读/写文件、对象管理、导航管理)。因此我与方法发生了冲突Unity 要求访问其他脚本中的数据(我来自 Delphi,拥有简单的单元)。 我找到的解决方案是这样的:inspector 中的各个组件使用 SendMessage 调用 Target 脚本中的方法,其中一些方法调用另外三个脚本中的其他方法。这三个脚本不能互相访问,但必须共享 Target 脚本变量。在 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 脚本的组件,并从 Hierarchy 中将 FileTarget 对象拖到每个脚本上。然后我可以使用 [HideInInspector]。这样我也可以访问 Target 脚本。
所有这一切看起来都很费力,我想为三个脚本使用静态类而不是 Monobehaviour(这三个脚本不是层次结构中的对象)。 但是除了不必实例化Target脚本中的三个脚本外,我还需要实例化三个脚本中的target脚本,并将它们添加为Target组件。 我绝对不想让你教编程,但你能指导我找到最好的方法吗? 谢谢
【问题讨论】:
-
您的所有脚本都需要从 MonoBehaviour 继承吗?读取和写入文件听起来并不需要(其他两个可能需要也可能不需要,我们没有足够的详细信息)
-
有了这个资产,我通过直接在游戏视图中绘制它们来创建网格。主要代码在 Target 中(例如 Awake、Update with Input.GetMouseButtonDown、OnEditorChangedPlayMode 和其他方法来绘制)。然后我将数据保存在磁盘上。为此,我从必须从 Target 脚本读取数据的附加脚本中调用方法。其他两个脚本或多或少的行为方式相同。