こんにちは私はobjectpoolingクラスに取り組んでおり、T "ObjectPooling"を持っています。 子供クラスを作った。だから私はこのクラスの自動シングルトンを作りたいと思っています。だから私は "インスタンス"を使用する場合は、m_instanceがnullであるかどうかをチェックする必要があります。 「はい」の場合はスクリプトを生成し、m_instanceを割り当てます。静的インスタンス作成が動作していないUnity3D C#抽象クラス
public abstract class ObjectPooling<T> : MonoBehaviour
{
public static float start = 30;
public static bool extendable = true;
public List<T> objects = new List<T>();
public abstract T getNext();
public abstract void Add(T obj);
static T m_instance;
public static T instance
{
get
{
return m_instance ?? (m_instance = CreateInstance());
}
}
protected static T CreateInstance()
{
GameObject g = new GameObject("ObjectPooling");
var c = g.AddComponent<T>();
return c;
}
}
問題は、CreateInstance()の最後の行にあります。 それは
Anが暗黙のうちに、私は私が今ここに何ができるかわからないのローカル変数の宣言は、 `UnityEngine.GameObject.AddComponent(のSystem.Type)と を初期化することはできません
を入力しました。と言います以前はObjectPoolingで試してみましたが、エラーはなく、動作していません。
私の目標は、子供がシングルトンも持っていることです。私は現在手動で行っていますが、私は後でこのようにしたいと思っています(基本クラスは子クラスではなく、それをチェックしてください)。
public class BulletPooling : ObjectPooling<BulletBase>
{
public override void Add(BulletBase obj)
{
if(extendable)
objects.Add(obj);
}
public override BulletBase getNext()
{
for(int i = 0; i < objects.Count; i++)
{
var bs = objects[i];
if (!bs.gameObject.activeInHierarchy)
return bs;
}
return null;
}
// this part
static BulletPooling m_instance;
public static BulletPooling instance
{
get
{
return m_instance ?? (m_instance = CreateInstance());
}
}
protected static BulletPooling CreateInstance()
{
GameObject g = new GameObject("ObjectPooling");
var c = g.AddComponent<BulletPooling>();
return c;
}
}
あなたは、私がGameObject.AddComponent
ではなく、「あらゆるタイプ」よりも、特定の型のオブジェクトを必要とするため、これはT = BulletBase
あああなたは正しいです。完全に忘れました。そうですか。しかし、私は大きな間違いを犯したと思う。子クラスのインスタンスを後で "BulletPooling.instance.getNext()"を使用するようにしたかったのですが、インスタンス上にカーソルを置くと "BulletBase ObjectPooling .instance {get;}が間違っています。 "BulletPooling BulletPooling。インスタンス{get; } "うーん、私はそこに再加工が必要だと思う。これがうまくいくかどうか分からない –
MaZy