【问题标题】:Accessing non-static varibles from an array [closed]从数组访问非静态变量[关闭]
【发布时间】:2018-02-24 11:59:01
【问题描述】:

快速提问:

我正在统一 c# 中编写,并且有一个 array 包含同一对象的多个实例。我想在数组的每个成员中更改一个非静态bool,并将其设置为true。我该怎么做?

我玩过 for-loops,并在此处和统一论坛上进行了搜索,但找不到答案。我不相信我凌乱、错误的代码会有任何帮助。有人愿意开导我吗? :)

编辑:感谢您的提示,现在就试试。求代码,请见谅:

Component[] toMerge;

for (int t = 0; t < mergeTargets.Length; i++) {
    toMerge[t] = mergeTargets[t].gameObject.GetComponent<Enemy>();
    toMerge.readyToMerge = true;
}

for (int t = 0; t < toMerge.Length; t++) {
    toMerge[t].readyToMerge = true;
}

【问题讨论】:

  • 如果您发布之前尝试过的任何代码会很好,因为很难理解您想要什么。你有什么对象,你想改变什么领域?
  • 您在寻找循环吗? foreach?
  • 考虑到要更改数组中的每个对象,为什么for(int i = 0; i &lt; array.length();i++) { object.elem = true; } 不起作用? (我不习惯 C#,所以你必须调整你的语法
  • 另外,如果你想改变一些对象的值,你最好使用List&lt;T&gt;,在foreach中改变它就像obj.Field = newValue;
  • foreach (var item in array) item.MyField = true;

标签: c# arrays for-loop static components


【解决方案1】:

您必须在toMerge 数组中分配 mergeTargets.Length 项目,并且地址不是数组而是它的项目:

    //DONE: We need mergeTargets.Length items in toMerge
    Component[] toMerge = new Component[mergeTargets.Length]; 

    for (int t = 0; t < mergeTargets.Length; i++) {
      toMerge[t] = mergeTargets[t].gameObject.GetComponent<Enemy>();
      //DONE: [t] - we want to change item, not the array
      toMerge[t].readyToMerge = true;
    }

【讨论】:

  • 谢谢!不敢相信我花了这么长时间才弄清楚这一点!
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2013-01-31
  • 2015-07-22
  • 2012-06-29
  • 2018-11-02
相关资源
最近更新 更多