我想知道如何在另一个脚本中访问字典中的键。是否可以。我有两个脚本,我想知道这是否可能。我已向字典添加了键,我想知道如何访问它们。
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> ();
}
}
}
您遇到了轻微的范围问题,但访问密钥的方式如下:
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
}
}
}
}
是的,这是可能的,但是您必须使用
public
关键字将字典公开为 ZoneDictonary 类的公共成员。
但是,我建议将其公开为属性并保持变量私有,而不是仅公开变量。 造成这种情况的原因有很多。 PSE 上的这个答案详细列出了几个。
private Dictionary<Vector3, bool> _isZoneEmpty = new Dictionary<Vector3, bool> ();
public Dictionary<Vector3, bool> IsZoneEmpty {
get
{
return _isZoneEmpty;
}
set
{
_isZoneEmpty = value;
}
}