如何访问字典中的密钥来自另一个脚本。

时间:2015-08-17 16:23:38

标签: c# c#-4.0 dictionary unity3d unityscript

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

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> ();


    }
}

}

2 个答案:

答案 0 :(得分: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
            }
        }
    }
}

答案 1 :(得分:0)

是的,这是可能的,但您必须使用public关键字将您的字典公开为您的ZoneDictonary类的公共成员。

我建议将它作为属性公开并保持变量私有而不是仅暴露变量。这有很多原因。 This answer on PSE详细列出了几个。

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

public Dictionary<Vector3, bool> IsZoneEmpty { 
    get
    {
        return _isZoneEmpty;
    }
    set 
    {
        _isZoneEmpty = value;
    }
}