【问题标题】:Check a value exist in array in unity 3d在统一 3d 中检查数组中是否存在值
【发布时间】:2013-03-28 08:29:25
【问题描述】:

我有两个脚本。

脚本1 脚本2

在 Script1 中,我声明了一个数组列表,它包含值 2、4、6 等...

public static ArrayList aArray= new ArrayList();

function update(){
   if(bool1)
   {
      aArray.Add(i);
   }
}

我必须检查 Script2 的 arraylist 中是否存在值 5。

如果值存在,我必须得到它的密钥。

如何获得?

【问题讨论】:

  • 没有。一个用于相机。另一个用于角色控制器。

标签: c# arrays monodevelop unity3d


【解决方案1】:

首先,我建议使用通用的List<T> 而不是非通用的ArrayList,这样您就可以指定进入该列表的对象类型(为了更好的类型安全)。
此外,声明变量readonly 可以防止您意外覆盖它,Lists 经常出现这种情况(毕竟,您总是可以只使用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);
}

【讨论】:

    【解决方案2】:

    尝试使用包含。此代码将检测您是否已经在 ArrayList 中拥有该值,并将阻止代码再次添加它。

    public static ArrayList aArray= new ArrayList();
    
    function update()
    {
       if(aArray.Contains(i)==false)
       {
          aArray.Add(i);
       }
    }
    

    如果你想删除一个值,它就像 aArray.Remove(i)

    一样简单

    【讨论】:

    • 我明白删除你的意思是“不添加”。我已经编辑了问题,告诉你如何删除。
    • 我也只想删除数组键。那么只有当删除第 0 个值时,第一个值才会自动移动到 0..
    【解决方案3】:

    如果我理解正确的话,Script1 在你的相机里,而 Script2 在一个角色里。为了这个示例,我们将分别称它们为 MainCamera 和 Character。

    现在,除非我理解错误,否则您正在尝试从 Script2 访问 Script1 中的数组。虽然其他答案非常正确,但 unity3D 需要一些解决方法才能访问它。

    无论如何,在 Script2 中使用这个:

    if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5))
    {
       //Do your code here
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2016-06-22
      • 2020-08-03
      • 1970-01-01
      相关资源
      最近更新 更多