我遇到的问题是CreateInstance
返回null。System.Activator.CreateInstance返回null
下面是代码:
if(spattmono[0] != null)
{
if((SpecialAttack) System.Activator.CreateInstance(
spattmono[0].GetClass()) == null)
{
Debug.Log("DUMB ACTIVATOR!!!");
}
//combo.SetSpecialAttack(spattack);
}
Attack
和SpecialAttack
是存储基本信息两类,并从UnityEngine.Object
继承。
Attmono
和spattmono
都是MonoScript
阵列,attmono
能够保持16 spattmono
能够保持4
他们从这些有信息。
for(int at = 0; at < numberOfAttacks; ++at)
{
attmono[at] = (MonoScript) EditorGUILayout.ObjectField(attmono[at],
typeof(MonoScript), false);
}
for(int spat = 0; spat < 4; ++spat)
{
spattmono[spat] = (MonoScript) EditorGUILayout.ObjectField(
spattmono[spat], typeof(MonoScript), false);
}
你能想到的MonoScript
一样的东西,拥有对象是什么类的类型。 我已经用Debug.Print
语句检查了其中的每一个,并且在分配时都不为空。
这是SpecialAttack
的代码。
public class SpecialAttack : UnityEngine.Object
{
public string Name;
public int Damage;
public int Force;
public float Cooldown;
public SpecialAttack()
{ }
public virtual bool Run()
{
return false;
}
}
,我最近测试了这个
if((SpecialAttack)System.Activator.CreateInstance(spattack.GetType()) == null)
{
Debug.Log("DUMB ACTIVATOR!!!");
}
而且它的确是零,所以这让我相信,激活找不到的类型,所以我不会给知道该怎么在这里做。
什么是'Attack','SpecialAttack'? 'spattmono []'和'attmono []'数组中有什么,你是如何创建它们的。你需要扩大这个问题,任何人都可以有一个合理的机会来回答这个问题。 – Kev
添加了更多信息。 – Diddykonga
当CreateInstance返回null时,'spattmono [0] .GetClass())会返回什么? –