2011-08-21 73 views
3

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

AttackSpecialAttack是存储基本信息两类,并从UnityEngine.Object继承。

Attmonospattmono都是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!!!"); 
} 

而且它的确是零,所以这让我相信,激活找不到的类型,所以我不会给知道该怎么在这里做。

+0

什么是'Attack','SpecialAttack'? 'spattmono []'和'attmono []'数组中有什么,你是如何创建它们的。你需要扩大这个问题,任何人都可以有一个合理的机会来回答这个问题。 – Kev

+0

添加了更多信息。 – Diddykonga

+0

当CreateInstance返回null时,'spattmono [0] .GetClass())会返回什么? –

回答

0

我们假设Activator.CreateInstance确实可以正常工作,那么对于提供给方法调用的参数必定会有些错误。 (因此,前面的问题)。

由于缺乏对传递给CreateInstance的实际值的知识,我在猜测,但我会怀疑传入的值为null或者是一个内部类型,但驻留在不同的程序集或类似的访问问题中。

+0

那么我传入Activator的MonoScript不是null,因为在尝试之前我有一个检查。关于访问问题我不确定。 – Diddykonga

+0

MonoScript?你说GetClass()返回一个类型,它是哪一个? –

+0

什么?它确实返回类型。我在说,MonoScript变量spattmono [0]不能为null,因为我在使用CreateInstance之前进行了检查。 – Diddykonga