私が抱えている問題は、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
これらのそれぞれをステートメントでチェックしましたが、割り当て時に両方とも 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だったので、アクティベーターがタイプを見つけることができないと私は信じているので、ここから何をすべきかわかりません。