如何从另一个脚本访问字典中的键

问题描述 投票:0回答:2

我想知道如何在另一个脚本中访问字典中的键。是否可以。我有两个脚本,我想知道这是否可能。我已向字典添加了键,我想知道如何访问它们。

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

namespace Vuforia
{
    public class ZoneDictonary : MonoBehaviour 
    {   
        public Vector3 Zone1V;
        public Vector3 Zone2V;
        public Vector3 Zone3V;
        public Vector3 Zone4V;
        public Vector3 Zone5V;

        void Start()
        {
            Dictionary<Vector3, bool> isZoneEmpty = new Dictionary<Vector3, bool> ();
            isZoneEmpty.Add (Zone1V, true);
            isZoneEmpty.Add (Zone2V, true);
            isZoneEmpty.Add (Zone3V, true);
            isZoneEmpty.Add (Zone4V, true);
            isZoneEmpty.Add (Zone5V, true);
        }
    }
}

这是另一个脚本。

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

namespace Vuforia
{
    public class Test : MonoBehaviour 
    {
        ZoneDictonary Zd;

        void Start()
        {
            GameObject ZD = GameObject.FindGameObjectWithTag ("Zone Manager");
            Zd = ZD.GetComponent<ZoneDictonary> ();
        }
    }
}
c# dictionary unity-game-engine
2个回答
1
投票

您遇到了轻微的范围问题,但访问密钥的方式如下:

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

namespace Vuforia
{
    public class ZoneDictonary : MonoBehaviour 
    {   
        public Vector3 Zone1V;
        public Vector3 Zone2V;
        public Vector3 Zone3V;
        public Vector3 Zone4V;
        public Vector3 Zone5V;

        // Dictionary must be here to access from outside of this script
        public Dictionary<Vector3, bool> isZoneEmpty = new Dictionary<Vector3, bool> ();

        void Start()
        {
            isZoneEmpty.Add (Zone1V, true);
            isZoneEmpty.Add (Zone2V, true);
            isZoneEmpty.Add (Zone3V, true);
            isZoneEmpty.Add (Zone4V, true);
            isZoneEmpty.Add (Zone5V, true);
        }
    }
}

...

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

namespace Vuforia
{
    public class Test : MonoBehaviour 
    {
        ZoneDictonary Zd;

        void Start()
        {
            GameObject ZD = GameObject.FindGameObjectWithTag ("Zone Manager");
            Zd = ZD.GetComponent<ZoneDictonary> ();

            foreach(Vector3 key in Zd.isZoneEmpty.Keys)
            {
                //do something with keys
            }
        }
    }
}

0
投票

是的,这是可能的,但是您必须使用

public
关键字将字典公开为 ZoneDictonary 类的公共成员。

但是,我建议将其公开为属性并保持变量私有,而不是仅公开变量。 造成这种情况的原因有很多。 PSE 上的这个答案详细列出了几个。

private Dictionary<Vector3, bool> _isZoneEmpty = new Dictionary<Vector3, bool> ();

public Dictionary<Vector3, bool> IsZoneEmpty { 
    get
    {
        return _isZoneEmpty;
    }
    set 
    {
        _isZoneEmpty = value;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.