3

私が抱えている問題は、CreateInstancenull を返すことです。

コードは次のとおりです。

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配列で、attmono16 個とspattmono4 個を保持できます。

彼らはそこから情報を取得します。

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これらのそれぞれをステートメントでチェックしましたが、割り当て時に両方とも null ではありません。

これが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!!!");
}

そして、それは実際にはnullだったので、アクティベーターがタイプを見つけることができないと私は信じているので、ここから何をすべきかわかりません。

4

1 に答える 1

0

Activator.CreateInstance が実際に正しく機能すると仮定してみましょう。その場合、メソッド呼び出しに渡された引数に何か問題があるはずです。(したがって、以前の質問)。

CreateInstance に渡される実際の値に関する知識が不足しているため、推測していますが、渡された値が null であるか、内部であるが別のア​​センブリに存在する型であるか、同様のアクセスの問題があると思われます。

于 2011-08-22T08:09:29.910 に答える