Как поставить в очередь действия и анимации в Unity для пошагового боя? - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю над пошаговой боевой последовательностью в Unity на C #, и в настоящее время у меня есть рабочий ход переключения, входы и AI.Но я не могу понять, как поставить его в очередь с анимацией и прочим, чтобы одно за другим происходило в ExecuteTurnActions () ;

Так что мой вопрос в основном, как мнеструктура ExecuteTurnActions () ?

Мне нужно, чтобы пройти через все сущности и воспроизвести их анимацию в соответствии с происходящим, например:

// PlayAnimation is simply Animator.SetTrigger(string)
Entities[0].PlayAnimation("Attack") or Entities[0].PlayAnimation("ReceiveDamage")

Мне нужно сделатьубедитесь, что когда одна сущность атакует, именно тогда, когда атака происходит, другая сущность получает урон и воспроизводит свою анимацию в этот момент.Я знаю, что есть анимационные события, но я не уверен, как заставить его течь из одного места и убедиться, что каждая сущность знает, какую сущность следует запускать для анимации следующей (например, при атаке).Есть предложения?

Моя структура выглядит примерно так в псевдокоде :

ENTITIES_TO_CREATE = MatchMaker.GetNumberOfPlayersAndEnemies();

void Start() {

    InitializeAllThatsNeeded();
    Entities[] = new Entity[ENTITIES_TO_CREATE];  

    // In a for loop, load up stuff and populate Entities
    Entities[0].Name = MatchMaker.GetName(0);
    Entities[0].Strength = MatchMaker.GetStrength(0); // etc etc etc

}

void Update() {

    bool HaveAllEntitiesSelectedTurnAction = new bool[Entities.Length];

    // Check every frame if all Entities have selected a turn action
    for (int i = 0; i <= Entities.Length - 1; i++) {

            HaveAllEntitiesSelectedTurnAction[i] = Entities[i].isTurnActionSelected;

        }

    // If the Entity that goes first has its action selected, then let the rest select theirs
    if(Entities[EntityHasFirstTurn].TurnActionSelected) {

        //All logic happens here, if Entity happens to be player then the player
        //is allowed input, if enity is NPC then generate hit value etc.

        // isTurnActionSelected set in this part

        // Now if all have selected their action, execute them in order
        if(HaveAllEntitiesSelectedTurnAction.All(x => x) {

            ExecuteTurnActions();

        }

    }   

}

1 Ответ

0 голосов
/ 27 ноября 2018

Для приоритизации событий я бы предложил использовать очередь приоритетов структура данных.

Что касается ExecuteTurnActions(), то он должен устанавливать только соответствующие флаги компонента Animator (на основе очереди,более вероятный).Возможно, вы захотите, чтобы у каждой сущности была своя собственная очередь событий, которая взаимодействует со своим собственным Animator.

Построение конечного автомата для всех ваших анимаций - это то, что вам нужно сделать в первую очередь.Установка определенных состояний позволит Unity обрабатывать все переходы.Чтобы узнать больше об Аниматоре и обработке его состояний, посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...