3

我遇到的问题是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!!!");
}

它确实是空的,所以这让我相信激活器找不到类型,所以我不知道从这里做什么。

4

1 回答 1

0

假设 Activator.CreateInstance 确实正常工作,那么提供给方法调用的参数肯定有问题。(因此前面的问题)。

由于缺乏对传递给 CreateInstance 的实际值的了解,我猜想,但我怀疑传递的值是 null 或者是内部类型但驻留在不同的程序集中或类似的访问问题。

于 2011-08-22T08:09:29.910 回答