我想知道如何在另一个脚本中访问字典中的键。可能吗。我有两个脚本,我想知道它是否可能。我已经在字典中添加了键,我想知道如何访问它们。
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> ();
}
}
}
答案 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;
}
}