【问题标题】:Unity C# Share Variable within Method with Other Script in SceneUnity C#在方法中与场景中的其他脚本共享变量
【发布时间】:2017-07-18 16:11:56
【问题描述】:

我正在 Unity 中开发一个项目,其中我需要在场景中的两个脚本(脚本 1 和脚本 2)之间共享一个字符串变量(metaData_Content)。但是,我需要共享的变量不是公共的或静态的,它是在脚本 1 的方法中建立的。因此,我无法从脚本 2 访问该变量。

脚本 1 中的重要代码:

public class SimpleCloudHandler : MonoBehaviour, ICloudRecoEventHandler
{
    public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
    {
        string metaData_Content = targetSearchResult.MetaData;
    }
}

脚本 2 中的重要代码:

void alertPopUp(string metaData_Content){

    //

}

我曾尝试使用 GetComponent 函数(如下所示),但仅当字符串在脚本 1 中公开时才有效。

    GameObject cloudScript = GameObject.Find("CloudRecognition");
    SimpleCloudHandler simpleCloudHandler = cloudScript.GetComponent<SimpleCloudHandler> ();
    string metaData_Content = simpleCloudHandler.metaData_Content;

问题:

是否有一些解决方法可以让我从脚本 2 中访问 metaData_Content 字符串?

【问题讨论】:

  • 将其设为公共变量?我在这里错过了什么?
  • 如何将该方法的返回类型更改为字符串并返回metaData_content?
  • 要么将其设为公共变量,要么创建包装变量的公共属性,要么编写返回变量的公共方法。有许多选项可供您使用,但它们要求您实施 一些公开的东西
  • 为什么不能直接改呢?至于 ryemoss 更改方法返回类型的想法,我认为这不是一个好主意,因为该方法看起来像是从另一个脚本调用的回调函数。我认为这是因为它说OnSomething.....
  • 程序员有一个很好的观点,如果这是一个回调函数,你不应该编辑返回类型。除非有理由你不能首先在方法之外将metaData_Content 声明为公共字符串,否则你应该按照 Serlite 的建议创建一个新的公共变量,为其分配 metadata_content 的值,然后检索新变量在你的第二个脚本中。

标签: c# unity3d methods


【解决方案1】:

我设法通过将此行添加到 SimpleCloudHandler 类来修复我的错误:

public string metaData_Content;

然后从OnNew SearchResult 方法中的变量中删除string 类型。此处上下文中显示的更改:

public class SimpleCloudHandler : MonoBehaviour, ICloudRecoEventHandler
{
    public string metaData_Content;

    public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
    {
        metaData_Content = targetSearchResult.MetaData;
    }
}

当我之前将string 类型留在方法中时,该行正在创建一个新的局部变量,而不是更改公共变量的值。

【讨论】:

    猜你喜欢
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多