我有两个剧本。
SCRIPT1 SCRIPT2
在Script1中我声明了一个arraylist,它包含值2,4,6等......
public static ArrayList aArray= new ArrayList();
function update(){
if(bool1)
{
aArray.Add(i);
}
}
我必须检查来自Script2的arraylist中存在的值5。
如果值存在,我必须得到它的密钥。
如何获得它?
答案 0 :(得分:3)
首先,我建议使用通用List<T>
而不是非通用ArrayList
,这使您可以指定进入该列表的对象类型(为了更好的类型安全性)。登记/>
此外,声明变量readonly
会阻止您意外覆盖它,List
通常就是这种情况(毕竟,您只能Clear
这样做:
public static readonly List<int> items = new List<int>();
现在回答您的实际问题,如果您想检查列表中是否存在值,您可以使用方法Contains
。
要检查值 not 是否存在,只需在表达式前放置一个!
:
if (!Script1.items.Contains(i)) {
// This will only execute if the list does not contain i.
items.Add(i);
}
答案 1 :(得分:2)
尝试使用Contains。此代码将检测您是否已经具有ArrayList中的值,并将停止代码再次添加它。
public static ArrayList aArray= new ArrayList();
function update()
{
if(aArray.Contains(i)==false)
{
aArray.Add(i);
}
}
如果你想删除一个值就像 aArray.Remove(i)
一样简单答案 2 :(得分:1)
如果我理解正确,Script1在你的相机中,而Script2在一个角色中。为了这个例子,我们将分别称它们为MainCamera和Character。
现在,除非我理解错误,否则您尝试从Script2访问Script1中的数组。虽然其他答案非常正确,但unity3D需要一些解决方法才能访问它。
无论如何,在Script2中使用它:
if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5))
{
//Do your code here
}