gpt4 book ai didi

c# - 从其他脚本Unity访问脚本

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:06 25 4
gpt4 key购买 nike

我为 Unity 写了一个小 Assets (编辑器)。它运作良好。然而,所有代码都在一个单一的 Monobehaviour 中,我想将它分成三个额外的脚本,每个脚本用于特定类型的事件(读/写文件、对象管理、导航管理)。因此我与方法发生冲突Unity 请求访问其他脚本中的数据(我来自 Delphi 及其简单的单元)。我找到的解决方案是这样的:检查器中的各个组件使用 SendMessage 调用 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;

最后,我必须将这三个脚本添加为目标脚本的组件,并将 FileTarget 对象从层次结构中拖到每个脚本上。然后我可以使用 [HideInInspector]。这样我也可以访问目标脚本。

这一切看起来很费力,我想到了为三个脚本使用静态类而不是 Monobehaviour(这三个脚本不是 Hierarchy 中的对象)。但是除了不用实例化Target脚本中的三个脚本外,我还需要实例化三个脚本中的target脚本,并添加为Target组件。我绝对不想让你教编程,但你能告诉我最好的方法吗?谢谢

最佳答案

由于您的三个脚本不需要附加到游戏对象,您可以简单地将它们定义为普通的 C# 类并从 Target 实例化它们。
此外,您可以为他们提供对 Target 的引用作为构造函数中的参数,您可以将其保存为私有(private)成员以供以后访问,例如:

class FileScript1
{
private Target _target;
public FileScript1(Target target)
{
_target = target;
}
}

然后在 TargetStart 中创建对象,如下所示:

private FileScript1 Script1;

public void Start () {
Script1 = new FileScript1(this);
}

关于c# - 从其他脚本Unity访问脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com