Вторник, 21 Августа 2018, 21:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Actors (Мой framework для Unity3d на котором я пишу игры.)
Actors
pixeyeДата: Воскресенье, 27 Мая 2018, 23:34 | Сообщение # 1
Red Winter Software
Сейчас нет на сайте








Выпустив несколько проектов на Unity3d, местами успешных, местами не очень я решил копать глубже и делать свой фреймворк на Unity для более быстрой и эффективной разработки.
Actors - это компонентно-ориентированный подход для создания игровых сущностей на основе компонентов даты и поведений.

В ближайшее время буду активно развивать документацию : )

Пример кода:

Код
  public class ActorPlayer : Actor, ITick
{

    [FoldoutGroup("Setup")] public DataMove dataMove;
  
          protected override void Setup()
  {
   Add(dataMove);
   Add<BehaviorInput>();
  }

}


Код

    [System.Serializable]

    public class DataMove : IData
    {
  public float x;
  public float y;

  public void Dispose()
  {
  }
    }


Код
   
          public class BehaviorInput : Behavior, ITick
    {

  [Bind] private DataMove dataMove;

  public override void OnTick()
  {
   dataMove.x = Input.GetAxis("Horizontal");
   dataMove.y = Input.GetAxis("Vertical");
  }
    }


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Вторник, 19 Июня 2018, 23:19
pixeyeДата: Вторник, 29 Мая 2018, 09:15 | Сообщение # 2
Red Winter Software
Сейчас нет на сайте
Добавил описания для processing скриптов.
Processings - это аналог "менеджеров" , "контроллеров"

Например, в моем фреймворке все апдейты централизованы и работают в ProcessingUpdate.
Этот подход гораздо быстрее использования Update методов в Monobehavior ( на новой версии Unity не проверял, юнитеки говорили, что апдейты еще будут оптимизировать ), а так же позволяет использовать апдейты на любом классе, а не только наследуемым от Monobehavior.

Код
public class MyCustomClass : ITick{

public MyCustomClass(){
   ProcessingUpdate.Default.Add(this);
}

public void Tick(){
    
}

}


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Вторник, 29 Мая 2018, 09:26
pixeyeДата: Среда, 30 Мая 2018, 11:54 | Сообщение # 3
Red Winter Software
Сейчас нет на сайте
Добавил описание для паттерна пулов объектов и описание таймеров.

Таймеры - это отложенные действия : )
Код
Timer.Add(0.1f, actor.HandleDestroyGO);

Можно сохранить таймер и использовать его потом.
Код
  private Timer timerBlink;
timerBlink = new Timer(BlinkFinish, 0.15f);
void Blink(){
timerBlink.Restart();
}

Можно добавить ID к таймеру чтобы потом обратиться к группе таймеров одного объекта и изменить например их скорость.
Я так делаю для механики стазиса когда мне нужно замедлить сущности.
Код

Timer.Add(0.1f, actor.HandleDestroyGO).AddID(actor);
var timers = Timer.FindAllTimers(actor);
  
    if (timers != null)
  for (var i = 0; i < timers.Count; i++)
     {
  timers[i].timeScale = 0.5f;
     }


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Среда, 30 Мая 2018, 12:01
pixeyeДата: Четверг, 31 Мая 2018, 10:28 | Сообщение # 4
Red Winter Software
Сейчас нет на сайте
Добавил описание для cхем ( Blueprints )

Схемы - это scriptable object для удобного хранения информации у одинаковых объектов.

Пример вытаскивания даты из схемы
Код
var weaponData = Get<DataBlueprint>().Get<DataWeapon>();


Настройка самой схемы идентична настройке акторов

Код
[CreateAssetMenu(fileName = "BlueprintCreature", menuName = "Blueprints/BlueprintCreature")]
   public class BlueprintCreature : Blueprint
   {
    [FoldoutGroup("Setup")]
    public DataCreature dataCreature;
    
    [FoldoutGroup("Setup")]
    public DataDeathAnimations dataDeathAnimations;

    public override void Setup()
    {
     Add(dataCreature);
     Add(dataDeathAnimations);
    }
   }


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d

pixeyeДата: Пятница, 01 Июня 2018, 11:23 | Сообщение # 5
Red Winter Software
Сейчас нет на сайте
Добавил описание для ECS. ECS у меня простенький и только для Actor классов. Я его не использую повсеместно. В будущем улучшу.
Вкратце позволяет фильтровать сущности в группы по определенным критериям ( по наличию компонентов или тэгу ) и обрабатывать их в апдейте.

Код

public class ProcessingCameraFollow : ProcessingBase, ITick, IMustBeWipedOut{
[GroupBy(Tag.GroupPlayer)]
[GroupExclude(Tag.StateDead)]
private Group groupPlayers;

   public ProcessingCameraFollow()
   {
      groupPlayers.OnGroupChanged += OnGroupPlayersChanged;
   }

   void OnGroupPlayersChanged()
    {  
      for(var i=0;i<groupPlayers.length;i++){
         Debug.Log("Actor: " + groupPlayers.actors[i]);
      }
    }
    
   public void Tick()
   {
         for(var i=0;i<groupPlayers.length;i++){
         DoSomething(groupPlayers.actors[i]);
            }
    }
    
    void DoSomething(Actor a){
    }
    
}


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Пятница, 01 Июня 2018, 12:23
pixeyeДата: Суббота, 02 Июня 2018, 10:31 | Сообщение # 6
Red Winter Software
Сейчас нет на сайте
Добавил описание для тэгов. Тэги это клей игры в моем понимании. Я их использую для валидации или как идентификаторы.

Код

// Оглушен от удара молотом
tags.Add(Tag.Stunned);
// Оглушен от падения с дерева
tags.Add(Tag.Stunned);
// Эффект оглушения от удара молотом закончился
tags.Remove(Tag.Stunned);
// проверка на оглушение. Герой до сих пор оглушен потому что вышел только один тэг оглушения.
bool condition_stunned = tags.Contain(Tag.Stunned);


Тэги можно удобно редактировать через инспектор :
- Добавляем класс тэгов с атрибутом TagField
Код
public static partial class Tag
    {
  [TagField(categoryName = "Weapons")] public const int WeaponGun = 9000;
  [TagField(categoryName = "Weapons/BigGuns")] public const int WeaponLaser = 9001;
    }


- Добавляем переменную где нам надо типа int с атрибутом [TagFilter(typeof(ТИП_КЛАССА_ГДЕ_НАШИ_ТЭГИ))]

Код
[TagFilter(typeof(Tag))] public int tag;




Базовую документацию я закончил. Дальше улучшалки и технодемку к которой скоро приступлю


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Суббота, 02 Июня 2018, 10:32
pixeyeДата: Вторник, 19 Июня 2018, 23:18 | Сообщение # 7
Red Winter Software
Сейчас нет на сайте
В этом видео мы продолжим создавать свою игру на движке Unity3d, познакомимся с концепциями фреймворка на основе небольшой игры.
Игру и фремймворк можно скачать с гитхаба!
=======================================================
Скачать фреймворк
Скачать игру
Поиграть в игру
Вступайте в нашу Discord группу
========================================================



Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Вторник, 19 Июня 2018, 23:18
pixeyeДата: Понедельник, 25 Июня 2018, 07:17 | Сообщение # 8
Red Winter Software
Сейчас нет на сайте
Маленькое обновление.

теперь сцены добавляются при создании в билд лист автоматически. Генерируются объекты сцен которые можно выставлять в стартерах - так же добавлен enum Scenes так что теперь перемещаться между сценами можно через него - не прописывая текстом название сцены - этот энум так же автогенерируется



Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Понедельник, 25 Июня 2018, 07:20
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Actors (Мой framework для Unity3d на котором я пишу игры.)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2018 Рейтинг