последовательность действий

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

последовательность действий

Сообщение Medveckij 16 фев 2013, 01:00

Ребята, такой вопрос: какие вы знаете/используете методы для последовательности действий? Враг прибыл, станцевал, посмеялся, отжался, покрутился вокруг оси, взорвался, Destroy(this.go).

Есть вариант - Coroutine и Yield. Но его нельзя вызывать в Update, иначе бред получается.

Можно поставить таймер, но и это самый настоящий костыль.

Очень бы хотелось исправить подобные места в проекте и сделать все как можно правильнее.

Любые замечания, направления, (кусочек скрипта) - приветствуются. Зарание спасибо))

Вот пока примерно так

Синтаксис:
Используется csharp
private int state = 0;
    void Update() {
        if (state == 0) {
            state = 1;
            return;
        }
        if (state == 1) {
            state = 2;
            return;
        }
    }
 
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: последовательность действий

Сообщение KBEP 16 фев 2013, 13:59

С делегатами попробуй, на C# не знаю как будет, но на JS примерно так:
Синтаксис:
Используется javascript
var action : function () : void = arrive;//что-то типа указателя на функцию

function arrive () : void
{
    //...
    if (/*здесь условие, при котором будем менять действие*/)
    {
        action = dance;//теперь в Update будет выполнятся функция dance
    };
};

function dance () : void
{
    //...
    if (/*здесь условие, при котором будем менять действие*/)
    {
        action = laugh;//теперь в Update будет выполнятся функция laugh
    };
};
function laugh () : void
{
    //...
    //здесь код по аналогии с функциями выше
};

function Update ()
{
    action();
};
В последней функции-действии можно запилить отключение/удаление скрипта если он больше не нужен Destroy(this), чтоб больше не выполнять Update.
 
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: последовательность действий

Сообщение pod4444 16 фев 2013, 14:16

Выдернул из проекта, вроде все, чтобы понять как работает. Из полезных плюшек, можно к делегату вешать несколько методов, убирать некоторые по надобности и так далее.
Синтаксис:
Используется csharp
namespace TestSolution
{
    using UnityEngine;

    public static class Game
    {
        internal static event StateChangeDelegate StateChange;
    }

    public class Player : MonoBehaviour
    {
        private EmptyDelegate Logic;

        private void Awake()
        {
            Game.StateChange += ChangeState;
        }

        private void Update()
        {
            if (Logic != null)
                Logic();
        }

        private void WaitFull()
        {
            ;
        }

        private void Initialization()
        {
            ;
        }

        internal override void ChangeState(StateGame state)
        {
            switch (state)
            {
                case StateGame.PreBattle :
                    Logic = Initialization;
                    break;
                case StateGame.StartBattle :
                    Logic = WaitFull;
                    break;
            }
        }
    }

    internal delegate void EmptyDelegate();
    internal delegate void StateChangeDelegate(StateGame state);
    internal enum StateGame
    {
        LoadAngar, Angar, LoadScene, PreBattle, StartBattle, Battle, Win, Lose, Draw
    }
}

 
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: последовательность действий

Сообщение Medveckij 16 фев 2013, 14:39

Oo, ребят, спасибо большое. То, что доктор прописал (3A4OT)
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: последовательность действий

Сообщение Андрей 16 фев 2013, 20:51

>>какие вы знаете/используете методы для последовательности действий

- Клипы анимации, которые могут запускаться скриптами хоть строго последовательно в очереди, хоть одновременно.
- Клип анимации может содержать вызов пользовательских функции из скрипта. Например, когда один клип заканчивается, то вызвать функцию уничтожения объекта или по некоторому условию вызывать некоторый другой клип.
- Аниматор появившийся в Unity 4.0 может сильно упростить жизнь при решении задачи о "последовательных действиях"
Изображение

Эти приёмы могут помочь, когда в игре очень много анимаций: последовательной, параллельной или сложной параллельной с условиями выполнения тех или иных ветвей анимации и не выполнения других ветвей анимации.

>>Враг прибыл, станцевал, посмеялся, отжался, покрутился вокруг оси, взорвался, Destroy(this.go).

- "Прибыл враг или нет", это скорее всего удобнее через скрипт, т.к. место назначения может меняться.
- "станцевал, посмеялся, отжался, покрутился вокруг оси,взорвался" - через клипы анимаций поставленных в очередь на выполнение или через Аниматор. Клип "взорвался" в конце ключевого кадра может вызывать функцию из скрипта, которая разрушит объект.
Аватара пользователя
Андрей
UNIт
 
Сообщения: 89
Зарегистрирован: 06 окт 2011, 10:48

Re: последовательность действий

Сообщение Medveckij 16 фев 2013, 21:38

Спасибо, познавательно. (3A4OT)

Пока не обновляемся. Сидим на предпоследней версии. Но пора бы уже, да.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Saltant, Yandex [Bot] и гости: 14