在Unity中使用GetComponent <>()时无法读取字典

曼蒂夫

我在GameObjects内部有三个脚本,结构如下:

GameObjectA
└ Script1
GameObjectB
└ Script2
└ Script3

Script3有一个我需要在中回忆的字典Script2

public void SomeMethod()
{
    Dictionary<string, int> someDictionary;
    someDictionary = gameObject.GetComponent<Script3>().myDictionary;
    //other stuff
}

如果我Script2在其Start方法中调用该方法,它将被正常调用,并且可以毫无问题地读取Dictionary。

然而,代码执行过程中,我有时会需要调用Script2来自Script1

Public GameObject GameObjectB;
GameObjectB.GetComponent<Script2>().SomeMethod();

而且,如果这样做的话,在执行过程中单步执行代码时,我会发现字典SomeDictionary为空。

这正常吗?如果需要,我可以提供更多信息或真实的摘要,我发现这种行为很奇怪,而且我不知道它是否正常运行。

编辑:下面的真实代码。

脚本1 ,PauseMenu

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PauseMenu : MonoBehaviour
{
    public GameObject tracksMenuContent;

    public void TracksList()
    {
        tracksMenuContent.GetComponent<PopulateGrid>().Populate();
    }
}

脚本2 PopulateGrid

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PopulateGrid : MonoBehaviour
{
    [SerializeField] private TileDescr _prefab;
    public static PopulateGrid instance;

    private void Awake()
    {
        Populate();
    }

    public void Populate()
    {
        Dictionary<string, TileSupply> tilesList;
        tilesList = gameObject.GetComponent<TileDB>().tiles30;
        TileDescr newObj; // Create GameObject instance

        foreach (KeyValuePair<string, TileSupply> tile in tilesList)
        {
            Sprite tileSprite = Resources.Load<Sprite>("Tiles/tile" + tile.Key);
            string tileText = "[" + tile.Key + "] " + tile.Value.available + "/" + tile.Value.total;

            newObj = Instantiate(_prefab, transform);
            newObj.Initialize(tileSprite, tileText);
        }
    }
}

Script3 ,TileDB

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TileSupply
{
    public int available;
    public int total;
}

public class TileDB : MonoBehaviour
{
    public Dictionary<string, TileSupply> tiles30 = new Dictionary<string, TileSupply>();

    public void Awake()
    {
        tiles30.Add("1", new TileSupply() { available = 1, total = 1 });
        //many more elements, all pretty similar
    }
}
法国式

一个可能的解决方案是使用static:

public class TileDB : MonoBehaviour
{
    public static Dictionary<string, TileSupply> tiles30 = new Dictionary<string, TileSupply>();

    public void Awake()
    {
        tiles30.Add("1", new TileSupply() { available = 1, total = 1 });
    }
}

在其他脚本中使用tile30之后,只需像这样调用字典

TileDB.tiles30

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

蜂巢在使用OpenCSVSerde时无法读取字符斜杠

使用.format()时Python读取字典字符串不正确

写入后无法使用go从文件读取字节

无法使用fgets函数读取字符串

在 Unity 中使用 WebSocket 时无法识别 URI 前缀

画布太大,无法在Unity中使用相机

LitJSON:无法在Unity中使用foreach

GetComponent 无法识别 Unity JavaScript 代码中的组件

使用模式/通配符匹配在ansible中读取字典键值

从字典中读取字典

从可能包含字典列表但可能不包含字典的字典中读取时,如何使用for循环?

无法成功读取字典值中的字符串?

unity c# 如何正确使用GetComponent

使用python数据库模块时从sqlite查询中获取字典

无法在Unity中使用JSONUtility创建的Java脚本(节点JS-Express)中读取JSON数据

从一个文件中读取字典并使用 python 从熊猫创建一个 excel(数据框)l

使用 Using 时无法读取流

使用 QProcess 时无法读取命令的输出

无法使用Node.js获取,写入和读取字体文件

使用 PHP 读取字符串时缺少第一行

(Perl)从文件中读取字符串时,是否可以使用插值变量?

C程序:使用scanf从stdin中读取字符时出错

当我使用循环时,C如何读取字符和换行符?

使用通配符读取字符串时出现奇怪的 bash 行为

无法在Unity中使用UnityWebRequest从HTTP响应获取数据

Unity角色资产无法在多人游戏中使用

移动时如何忽略旋转?(在Unity中使用C#)

当我使用Java中的Scanner Class读取.txt文件时,如何仅读取字符串或整数?

我无法在 Pycharm 中使用字典