【问题标题】:How to check if bool is false in a loop如何在循环中检查bool是否为假
【发布时间】:2026-01-12 05:25:01
【问题描述】:

我正在尝试遍历一个类数组。该类有两个变量:transform 和 bool。

我想在另一个脚本中循环查看当前位置是否被占用,如果是,占用的布尔值将设置为 true。

我该怎么做?

 public Positions[] PosInObect = new Positions[1];

 [System.Serializable]
 public class Positions
 {
     public Transform pos;
     public bool isFilled;
 }

 for (int i = 0; i < TheObject.GetComponent<GetInObject>().PosInObect.Length; i++) 
 {

 }

【问题讨论】:

  • 标签unity的描述中的第一句话是“不要在关于UNITY游戏引擎的问题上使用(使用:unity3d代替)!!”
  • 您显示的代码有一个大小为 1 的数组,不需要太多循环。 :)
  • 我只使用了 1 进行测试,因为有问题的对象稍后没有多个座位,他们将成为玩家可以使用的多个对象

标签: c# class loops for-loop unity3d


【解决方案1】:

好吧,你可以只访问相关索引处的元素,然后检查字段值:

 if (TheObject.GetComponent<GetInObject>().PosInObect[i].isFilled)

但是,如果您不需要索引,我建议使用 foreach 循环:

foreach (var position in TheObject.GetComponent<GetInObject>().PosInObect)
{
    if (position.isFilled)
    {
        ...
    }
}

如果你确实需要这个位置,我会先使用一个局部变量来获取数组一次:

var positions = TheObject.GetComponent<GetInObject>().PosInObect;
for (int i = 0; i < positions.Length; i++)
{
    if (positions[i].isFilled)
    {
        ...
    }
}

我还建议使用属性而不是公共字段,并遵循 .NET 命名约定。

【讨论】:

  • 好的,我得等 3 分钟才能接受这个,但这是完美的,非常感谢你教我分配,这非常有用
  • 一个简单的问题,我怎样才能公开职位?我会使用什么变量类型
  • 这样我就可以访问另一个类
  • @pvtctrlalt:但是你对公开有什么要求?您目前已将所有内容作为公开...
  • 不,我的意思是这个位 var 位置 = TheObject.GetComponent().PosInObect;我怎样才能使它在其他功能中可用,因为目前它是本地的
【解决方案2】:

这可以在 foreach 循环中完成。您仍然可以从该类实例访问变量。

foreach(Positions pos in TheObject.GetComponent<GetInObject>().PosInObect)
{
    if(pos.isFilled)
    {
       //Do something
    }
}

【讨论】: