我遇到的问题是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!!!");
}
它确实是空的,所以这让我相信激活器找不到类型,所以我不知道从这里做什么。