所需的类型具有存储在字符串中的名称,因此我无法在代码中将其用作查找对象的类型。
为了找到所需的对象,我尝试了多种方法将字符串用作类型,但是没有一种起作用。
levelN = "Level"+levelNumber;
第一次尝试:
var levelManager = FindObjectOfType< Type.GetType(levelN)>();
第二次尝试:
var type = Type.GetType(levelN);
var levelManager = FindObjectOfType< type.GetType()>();
第三次尝试:
var levelManager = FindObjectOfType< type>();
我创建了“类型”,该类型具有搜索对象所需的类型,但是当我在代码中使用该类型时,第一和第二个错误出现( cs1525 )。 第三次尝试显示:
错误CS0118:“类型”是变量,但其用法类似于类型
答案 0 :(得分:1)
由于缺乏良好的minimal, complete, and verifiable code example,目前尚不清楚您要问什么。特别是,虽然您说要按类型检索对象,但是从您的帖子中并不清楚实际上是否有诸如$userAcct = new UserAccount();
$userAcct->create([
'user_id' => $user->id,
'acct_id' => $accounts->id
]);
,Level1
等名称的类型。
假设有,那么您应该只使用非通用的Level2
重载,在此处记录:https://docs.unity3d.com/2018.4/Documentation/ScriptReference/Object.FindObjectOfType.html
然后,您可以传递实际的FindObjectByType(Type)
对象,该对象可以通过调用Type.GetType(string)
来检索。不过请密切注意文档:
typeName 字符串
要获取的类型的程序集限定名称。请参阅AssemblyQualifiedName。如果类型在当前执行的程序集中或在Mscorlib.dll中,则只需提供其名称空间限定的类型名称即可。
您不太可能通过例如方法的字符串Type
。
坦率地说,最好初始化自己的"Level1"
表以查找“级别管理器”对象。假设您的“级别管理器”对象共享一个通用的基本类型,则可以将其用作字典的值类型,而不是Dictionary<string, object>
。
大概这是您的代码很少需要执行的操作。只要这种情况不经常发生,就可以了。不过,请注意Unity3d documentation中的指南:
通常的最佳做法是在生产代码中消除对
object
和Object.Find
的所有使用。由于这些API需要Unity遍历内存中的所有GameObjects和Components,因此随着项目范围的扩大,它们会迅速变得不可用。