using UnityEngine;
using System;
namespace Core
{
public class GameEntity : MonoBehaviour
{
private string TypeName => $"Core.GameDataStore`1[{GetType()}]";
private Type Type => Type.GetType(TypeName);
private object Store => Activator.CreateInstance(Type);
private void Awake()
{
RegistToStore();
}
private void OnDestroy()
{
UnRegistFromStore();
}
private void RegistToStore()
{
ExecuteStoreMethod("Regist");
}
private void UnRegistFromStore()
{
ExecuteStoreMethod("UnRegist");
}
private void ExecuteStoreMethod(string methodName)
{
var method = Type.GetMethod(methodName, new Type[] { GetType() });
method.Invoke(Store, new object[] { this });
}
}
}
using System.Collections.Generic;
namespace Core
{
public class GameDataStore<T>
{
private static readonly List<T> items = new List<T>();
public IReadOnlyList<T> Items => items;
public void Regist(T item)
{
items.Add(item);
}
public void UnRegist(T item)
{
items.Remove(item);
}
}
}
気をつけること。
typeNameは本来namespaceも必要。
GetType().NameSpaceで取得できる。
動的に呼び出すメソッドはpublicでなければならない。
目的。
GameEntityを継承したクラスが自動で自クラスをGameDataStoreに登録するようにしたかった。