Воскресенье, 18 Августа 2019, 04:21

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Бафы и как их реализовать
Бафы и как их реализовать
ArtemSДата: Вторник, 15 Августа 2017, 10:45 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Хочу узнать правильно ли я делаю. Есть баф. Допустим он длится 5 сек.
Код

float bufTimer;
float bufTime = 5;

FixedUpdate()
{
bufTimer = bufTime + Time.time;

if (bufTimer > Time.time)
     {<свойства бафа>}
}


Вопрос собственно в том, а если ли метод который просто говорит держать какое-то свойство определенный отрезок времени ?
Что-то типа <метод>.<сколько секунд>.<свойство бафа>


хуяк, хуяк и в продакшн

Сообщение отредактировал ArtemS - Вторник, 15 Августа 2017, 10:45
teramiДата: Четверг, 24 Августа 2017, 09:10 | Сообщение # 2
был не раз
Сейчас нет на сайте
ArtemS, таймер и условие оключения бафа, таймер могу скинуть, а вот отключение бафа маловато данных

Всё мрак, спасенья нет
EchoITДата: Четверг, 24 Августа 2017, 10:55 | Сообщение # 3
старожил
Сейчас нет на сайте
ArtemS, добавляешь бафф, через N времени удаляешь. Пока бафф активен, делаешь его действия.

Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Четверг, 24 Августа 2017, 11:15
bodya_WMДата: Четверг, 24 Августа 2017, 11:09 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Самое правильное архитектурное решение это класс унаследованный от базового класса Buff.
Например:
Код


class Buff {
  
  protected bool Active = true;
  protected int Timer;
  protected int Time = 5000;
  protected string Name = "Buff";
  
  public void Update() {
    if(Active) {
      Timer = Time.time + Time;
    }
    if(Timer > Time.time + Time && Active)
      Active = false;
  }

}

class PoisonBuff : Buff {
  
  public override void Update() {
    base.Update();
    Player.Health -= 1;
  }

}


Разработчик игрового движка WaveGameEnvironment2D

Сообщение отредактировал bodya_WM - Четверг, 24 Августа 2017, 11:09
EchoITДата: Четверг, 24 Августа 2017, 11:19 | Сообщение # 5
старожил
Сейчас нет на сайте
bodya_WM, вопрос был немного не в этом. И кстати бафф в твоём коде будет работать бесконечно, потому что даже после присвоения в Active значения false, оно нигде не проверяется, да и исходный метод Update должен быть virtual. Подстава для ТСа, чтобы он учился? :D


P.S.: с такими архитектурными решениями можно поседеть при разработке RPG с сотнями различных баффов и дебаффов.


Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Четверг, 24 Августа 2017, 11:20
bodya_WMДата: Четверг, 24 Августа 2017, 11:33 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Цитата
поседеть

Как раз таки нет.
Это наоборот будет намного удобнее.
Ну или ещё как вариант хранить баффы в файлах, например json, создать какой то базовый набор "действий" баффа(т.е например лечить или увеличивать скорость) и уже в json это всё описывать.
Библиотек для сериализации/десериализации С# для .NET достаточно.
Цитата
И кстати бафф в твоём коде будет работать бесконечно

Согласен, в унаследованном баффе нужно делать проверку на Active. Но я лишь пример привёл, суть автору понятна.
Цитата
virtual

Согласен, забыл.


Разработчик игрового движка WaveGameEnvironment2D

Сообщение отредактировал bodya_WM - Четверг, 24 Августа 2017, 11:46
ArtemSДата: Понедельник, 28 Августа 2017, 06:52 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Спасибо всем огромное за советы!!!!

Добавлено (28 августа 2017, 06:52)
---------------------------------------------
terami, скинь ,пожалуйста, хотелось бы посмотреть на твое решение вопроса


хуяк, хуяк и в продакшн
berilДата: Среда, 30 Августа 2017, 00:05 | Сообщение # 8
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
У меня как то так на StrangeIoCе :D
Основной скрипт с логикой


Котроллер


-делаешь иерархию нормальную
-делаешь каждый баф отдельным компонентом со своей логикой
-делаешь контроллер , который будет накладывать эти баффы
-через котроллер просто добавляешь к обьекту через AddComponent нужный бафф со всей его логикой, дальше он уже независимо от других компонентов будет работать
ну в общем MVC




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Бафы и как их реализовать
  • Страница 1 из 1
  • 1
Поиск:

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