2D-анимация Unity не воспроизводится после SetActive (true)

У меня есть одноэкранная 2D-игра, в которой у меня отключен игровой объект. Под ним несколько анимированных детей. Родительский объект содержит аниматор для детей. Когда я включил родительский элемент, анимация не будет воспроизводиться. Аниматор выглядит так, как будто он пытается обработать состояние входа по умолчанию, но не завершает. Я провел некоторое исследование по этому поводу, и кажется, что отключение, а затем включение чего-то не запускает аниматор. Я попытался написать для него какой-то код, но безуспешно, и установка ложного рендеринга спрайтов тоже не сработает, так как спрайтов просто слишком много. Вот моя последняя попытка: есть идеи?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class animationState : MonoBehaviour
{
    public Animator anim;

    private void OnEnable()
    {
        if (anim.gameObject.activeSelf)
        {
            anim.Play("pinWheelAnimation");
        }
    }
}

person Justin Patterson    schedule 04.11.2017    source источник


Ответы (2)


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

Взгляните на это: Параметры аниматора

person Luka Rolak    schedule 04.11.2017
comment
Может, я неправильно объяснил. Есть только родительский объект, у которого есть аниматор / анимация, которые, по сути, создают ключевые кадры для дочерних объектов. Это нормально работает. Только когда объект активен, анимация не загружается. Если бы я оставил его активным, он бы воспроизводил и менял состояния по мере необходимости. Проблема в том, что при запуске он неактивен, а при активации анимация не воспроизводится. Есть другие мысли? - person Justin Patterson; 05.11.2017

Попробуйте установить IdleState как DefaultState без времени выхода и без анимации и определить событие триггера для перехода в состояние вашей анимации. Затем активируйте триггер в

void Start()
{
}
person sight    schedule 06.11.2017
comment
Я проверю и дам знать! Спасибо!! - person Justin Patterson; 08.11.2017