LeoECS - важные изменения, снова

Новая 20180722 версия LeoECS фреймворка была выпущена и пришло время поломать что-нибудь снова. :)

Изменения

  • Пространство имен было изменено с LeopotamGroup.Ecs на Leopotam.Ecs - стало короче и теперь отражает досновное доменное имя.
  • Все marshal-by-reference (классы за исключением строк) поля компонентов будут автоматически проверяться на зануление при удалении компонента с сущности.
    Это позволит обнаруживать потенциальные утечки памяти и исправлять их. Если вы уверены, что поле не должно быть занулено (например, заранее созданные коллекции) при удалении, можно использовать атрибут [EcsIgnoreNullCheck] на этом поле для пропуска подобной проверки.
    • Пример с утечкой памяти:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      class Data { }

      class Component2 {
      public Data Data;
      }
      ...
      Component2 c;
      var entity = world.CreateEntityWith<Component2>(out c);
      c.Data = new Data();
      world.RemoveComponent<Component2>(entity);

      Будет показано исключение с сообщением:

      Memory leak for “Component2” component: “Data” field not nulled. If you are sure that it’s not - mark field with [EcsIgnoreNullCheck] attribute

    • Пример без утечки памяти:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      class Data { }

      class Component2 {
      // Preinited field and we want to keep it not nulled.
      [EcsIgnoreNullCheck]
      public Data Data = new Data();
      }
      ...
      Component2 c;
      var entity = world.CreateEntityWith<Component2>(out c);
      c.Data = new Data();
      world.RemoveComponent<Component2>(entity);

      Исключения в данном случае не будет.

Оформить подписку можно здесь: