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