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");
}