Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
нигде нет более менее полной публикации на тему проектирования архитектуры в играх
Характеристики объектов в игре
namespace Engine
{
public abstract class UnitStrategyBase
{
public virtual EventHandler Handler { get; set; }
public virtual Unit CurrentUnit { get; set; }
public virtual void OnAdd(Unit unit)
{
CurrentUnit = unit;
}
public virtual void OnRemove(Unit unit)
{
CurrentUnit = null;
}
public virtual void Send(IEvent @event)
{
if (Handler != null)
{
Handler.Send(@event);
}
}
}
}
Коп — это уровень сборки приложения, когда у компонента есть не только код, но и данные и ui.Тут просто одно и то же название используется в разных контекстах. То, о чем вы говорите – скорее модулями правильней называть, а не компонентами.
Для кругозора можно еще почитать про аспекты (ваши компоненты на них сильно похожи) и мультиагентное программирование.Полезно конечно будет почитать. Но из того, что я сейчас прочитал про аспекты – не сказал бы, что мои компоненты на них похожи. Я так понял, что если какой-то общий функционал вынести в отдельный метод, и как-то организовать его вызов при выполнении любого метода в любом классе, к которому он привязан, то эта дополнительная привязанная функциональность и будет называться аспектом.
В вашем примере, кстати, компоненты, отвечающие за урон ближнего боя и урон дальнего боя, вполне логично пронаследовать от одного компонента, отвечающего за урон в принципе.Согласен. Да и упоминал немного в статье, что наследование компонентов – вполне нормально.
И наоборот, если даже делать универсальное хранилище для характеристик объектов, то апи доступа к ним стоит сделать типизированным (не object GetPropertyByName, а int GetLivesCount).Кстати, я делал аналогично для доступа к данным из аниматора в Mecanim. Становиться удобней работать.
public class AnimatorParams
{
private Animator _animator;
public float Speed
{
get { return _animator.GetFloat("Speed"); }
set { _animator.SetFloat("Speed", value); }
}
...
}
Приемы при проектировании архитектуры игр