Четверг, 28 Марта 2024, 16:51

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » как сделать единоразовое исполнение действия в юнити в updat (суть в заголовке)
как сделать единоразовое исполнение действия в юнити в updat
tdukДата: Четверг, 05 Января 2017, 21:46 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Например есть код:
Update(){
Передать ход третьему врагу
}
Как сделать действие 1 раз, но при определенных обстоятельствах. Прикол в том, что кол-во врагов может быть разным.


AndrewNovakДата: Пятница, 06 Января 2017, 00:26 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Код
isRunOnce = false;

void Update(){
     if(Input.anyKey && !isRunOnce){
          Debug.Log("Once");
          isRunOnce = true;
     }
}


Использовать булевую переменную. Но это плохой код


COLD DEPTH Steam
PUSS!
COLD DEPTH
roma3fonДата: Пятница, 06 Января 2017, 03:27 | Сообщение # 3
участник
Сейчас нет на сайте
tduk, использование переменной состояния, как подсказал господин AndrewNovak, наилучшие решение.
Если экстрасенсорные способности меня не подвели, то вам нужно что-то вроде этого:
Код

public class Main : MonoBehaviour
{
    Enemy enemy1 = new Enemy("Warrior");   //Враги 1..N
    Enemy enemy2 = new Enemy("Archer");
    ...
    Enemy enemyN = new Enemy("Mage");

    public delegate string Attack(int damage);  //Делегат на метод атаки.
       //Использование делегатов в данном случае хорошо тем,
       //что мы можем одновременно атаковать одним игроком,
       //защищаться другим, и бегать по кругу от ужаса третим

    void Update ()
    {
  if (ChangeAttackEnemyToMage = true)  //Обрабатываем событие передачи при определенных обстоятельствах,
       //тут может быть что угодно
  {
   Attack attack = enemyN.Attack;  //Передаем атаку Магу
   ChangeAttackEnemyToMage = false;
  }
  Debug.Log (attack(123));  //Атакуем
    }
}

public class Enemy
{
    string Name;
    public Enemy(string name)
    {
  Name = name;
    }

    public string Attack(int damage)
    {
  return Name + " " + damage.ToString();
    }        
}


Сообщение отредактировал roma3fon - Пятница, 06 Января 2017, 03:31
tdukДата: Пятница, 06 Января 2017, 11:27 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
roma3fon, код отличный, по мне. Но я плохо объяснил видимо.
Код
public int numberTurn=1;
public int GlobalTurn=1; // на самом деле её определяет отдельный объект,но я с телефона прост))
public int ActivePoints=0;//очки действий
public int maxAP=2;//максимальное кол-во действий

void Update (){
if(numberTurn==GlobalTurn)
{
ActivePoints=maxAP;
}
if(ActivePoints>0){
//если очков действий больше нуля, то что-то делаем,например ходим
}else if(ActivePoints <=0){
GlobalTurn+=1;//если меньше 0, то передаем ход другим
}
}

Проблема в том, что 1 действие в Update надо сделать 1 раз, а оно зацикливается.


CleverRusДата: Пятница, 06 Января 2017, 11:37 | Сообщение # 5
почетный гость
Сейчас нет на сайте
А чем тебе метод AndrewNovak не подходит?
tdukДата: Пятница, 06 Января 2017, 12:16 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
CleverRus, у него, просто ход, а надо возмещать очки действий игроку, т е было 0 а при каждой очереди его хода,т е когда его очередь подошла,надо сделать например 2. Я указал то,что я пробовал использовать но там выходит зацикленность.

CleverRusДата: Пятница, 06 Января 2017, 12:26 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Ну то, что ты написал, только что никак не очевидно из первого сообщения.
Если разное количество врагов добавляй список, если увеличивать переменную (как у тебя в примере было 0 стало 2) добавляй счётчик.
tdukДата: Пятница, 06 Января 2017, 13:04 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
CleverRus, можно пример

ReanДата: Пятница, 06 Января 2017, 13:30 | Сообщение # 9
участник
Сейчас нет на сайте
Вариация на тему. В главной роли - coroutine.


По сути тот же игровой цикл, но с ориентацией на TurnBase. На истину не претендую, но как вариант.


Сообщение отредактировал Rean - Пятница, 06 Января 2017, 13:34
alexsilentДата: Пятница, 06 Января 2017, 13:59 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
я использую Boolean для таких целей, как сказал Андрей в первом ответе
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » как сделать единоразовое исполнение действия в юнити в updat (суть в заголовке)
  • Страница 1 из 1
  • 1
Поиск:

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