Как можно создать систему компонентов, похожую на unity(Start,Update пр.)
В качестве практики пишу игровой движок, столкнулся с проблемой. Хотелось бы добавить возможность создавать компоненты, о которых изначально программа и не могла знать, но в конечном образе из-за наследования одного основного класса могла запустить метод "Start" или "Update". Для наглядности вот что хотелось бы сделать:
using ...;
public class ObjectBehavior
{
public virtual void Start()
{
// Для каждого класса, наследующего этот класс запускать метод Start, при условии, что он там прописан. (они разные и про них ничего заранее программа не знает)
}
public virtual void Update()
{
// Для каждого класса, наследующего этот класс запускать метод Update, при условии, что он там прописан.
}
}
// другой файл
public class CameraController : ObjectBehavior
{
public void Update()
{
// Внезапный метод Update во внезапном классе CameraController, наследующий OB.
// Метода Start здесь нет, он не должен запускаться из OB.
}
}
Ответы (1 шт):
Автор решения: Сергей
→ Ссылка
В данном случае можно создать функцию Instantiate или Create и в ней в лист экземпляров будет записываться экземпляр класса(мы его можем закастить в класс ObjectBehavior), затем при Update циклом проходится по листу и запускать в нём функцию start или update.
public static void Instantiate(ObjectBehavior behavior)
{
behaviors.Add(behavior);
}
public void SomeVoidInSomeClass()
{
// Работает только в случае, если класс наследуется от ObjectBehavior
ObjectBehavior.Instantiate((ObjectBehavior)this);
}