【问题标题】:Access script from other script Unity从其他脚本 Unity 访问脚本
【发布时间】: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 脚本读取数据的附加脚本中调用方法。其他两个脚本或多或少的行为方式相同。

标签: c# unity3d


【解决方案1】:

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

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

然后像这样在TargetStart 中创建对象:

private FileScript1 Script1;

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

【讨论】:

  • 非常感谢,这样脚本就可以与 Target 脚本通信,而无需将它们添加为组件。我已将您的答案标记为已解决。不幸的是,我的赞成票没有被接受,因为我刚刚注册。谢谢大家的帮助。
【解决方案2】:

假设您要将这些脚本附加到游戏对象,您需要使用GetComponent<>()。调用的工作方式是返回指定类型的组件,如果不存在则返回 null。通过这种方式,您可以将脚本(也是一个组件)附加到您选择的 GameObject,然后进行调用。

例如:

myClassVariable = this.gameObject.getComponent<myClass>();

【讨论】:

  • 我想知道是否真的有必要将三个脚本添加为组件,或者是否有其他方法可以共享变量和方法。
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多