Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试按FindObjectByType获取集合时找不到对象集合_C#_Unity3d - Fatal编程技术网

C# 尝试按FindObjectByType获取集合时找不到对象集合

C# 尝试按FindObjectByType获取集合时找不到对象集合,c#,unity3d,C#,Unity3d,我正在尝试按Tiledata的类型查找所有对象 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; using UnityEngine.UI; using System.Linq; .... Tiledata Test1 = new Tiledata(3, 1); Debug.Log(Test1

我正在尝试按
Tiledata
的类型查找所有对象

  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;
  using UnityEngine.Tilemaps;
  using UnityEngine.UI;
  using System.Linq; 

  ....

  Tiledata Test1 = new Tiledata(3, 1);
  Debug.Log(Test1.growTime);
  foreach(Tiledata Tile in FindObjectsOfType<MonoBehaviour>().OfType<Tiledata>()) {
      Debug.Log("Test");
  } 
我的代码中没有错误

如果我调试
Test1.growTime
,我肯定会得到3。因此可以引用
Test1

但我的问题是当我有很多Tiledata时,我想通过它们进行迭代。在我的foreach中,我尝试通过它们进行迭代,但什么都没有出现

foreach循环中没有执行任何代码,因此似乎没有类型为
Tiledata
的对象,即使我可以引用它,并且它是在foreach循环的正上方创建的?

FindObjectsOfType()
在场景中查找
MonoBehavior
,或者更好地说,是a。更多信息请访问

它将不返回任何资源(网格、纹理、预设等)或不活动 物体。不会返回设置了HideFlags.DontSave的对象。使用 Resources.FindObjectsOfTypeAll可以避免这些限制

Tiledata
不是从
monobhavior
派生的,因此无法找到它

要查找它(使用
FindObjectsOfType
),您需要从
monobhavior
派生它

public class Tiledata : MonoBehaviour
 {
     public int growTime;
     public int growLevel;

     public Tiledata(int growTime1, int growLevel1) {
        growTime = growTime1;
        growLevel = growLevel1;
     }

 }
并将其作为
组件添加到游戏中
(这还需要附加
游戏对象

Tiledata Test1=新游戏对象().AddComponent();
Log(Test1.growTime);
foreach(FindObjectSoftType()中的Tiledata磁贴){
调试日志(“测试”);
} 

嗨,杰克,是的,这就成功了。我有一个后续问题:如何在创建对象时设置growTime和growtlevel(而不必手动分配每个值,例如Test1.name=“name”)?您可以使用。或者创建一个公共方法
SetupTile(int-time,int-level)=>(growTime,growtlevel)=>(time,level)。对于高级行为,您可以遵循。如果您需要进一步的细节,最好在另一个问题中询问。
public class Tiledata : MonoBehaviour
 {
     public int growTime;
     public int growLevel;

     public Tiledata(int growTime1, int growLevel1) {
        growTime = growTime1;
        growLevel = growLevel1;
     }

 }
Tiledata Test1 = new GameObject().AddComponent<Tiledata>();
  Debug.Log(Test1.growTime);
  foreach(Tiledata Tile in FindObjectsOfType<Tiledata>()) {
      Debug.Log("Test");
  }