private GPUAnimatorOverrideController GetOverrideController(Animator animator)
                {
                    RuntimeAnimatorController runtimeAnimatorController = GetRuntimeAnimatorController(animator);

                    if (_renderer == null)
                    {
                        _renderer = GetComponent <GPUAnimatorRenderer>();
                    }

                    if (!_overrideControllers.TryGetValue(runtimeAnimatorController, out GPUAnimatorOverrideController overrideController))
                    {
                        List <KeyValuePair <AnimationClip, AnimationClip> > overrides = new List <KeyValuePair <AnimationClip, AnimationClip> >();

                        foreach (AnimationClip origClip in runtimeAnimatorController.animationClips)
                        {
                            for (int i = 0; i < _overrideClips.Length; i++)
                            {
                                if (_overrideClips[i]._originalClip == origClip)
                                {
                                    overrides.Add(new KeyValuePair <AnimationClip, AnimationClip>(origClip, _overrideClips[i]._overrideClip));
                                }
                            }
                        }
                        overrideController = new GPUAnimatorOverrideController(runtimeAnimatorController, _renderer._animations.GetAnimations(), overrides);
                        _overrideControllers[runtimeAnimatorController] = overrideController;
                    }

                    return(overrideController);
                }
Example #2
0
                public override void Initialise(GPUAnimatorRenderer renderer)
                {
                    base.Initialise(renderer);

                    _skinnedMeshRenderer     = GameObjectUtils.GetComponent <SkinnedMeshRenderer>(this.gameObject, true);
                    _animationStates         = new GPUAnimationState[0];
                    _primaryAnimationState   = null;
                    _secondaryAnimationState = null;

                    GPUAnimations animations = _renderer._animations.GetAnimations();

                    _animationStates = new GPUAnimationState[animations._animations.Length];

                    for (int i = 0; i < animations._animations.Length; i++)
                    {
                        _animationStates[i] = new GPUAnimationState(this, animations._animations[i]);
                    }

                    _activeAnimationStates = new List <GPUAnimationState>(animations._animations.Length + 1);

                    _primaryAnimationState   = GetAnimationState(_defaultAnimation);
                    _secondaryAnimationState = null;

                    if (_primaryAnimationState != null && _playAutomatically)
                    {
                        _primaryAnimationState.Enabled = true;
                        _primaryAnimationState.Weight  = 1.0f;

                        if (_wrapMode != WrapMode.Default)
                        {
                            _primaryAnimationState.WrapMode = _wrapMode;
                        }
                    }
                }
                public static GPUAnimatorOverrideController GetOverrideController(GPUAnimatorRenderer renderer, Animator animator)
                {
                    GPUAnimatorRendererControllerOverrider animatorRendererOverrideController = renderer.GetComponent <GPUAnimatorRendererControllerOverrider>();

                    if (animatorRendererOverrideController != null)
                    {
                        return(animatorRendererOverrideController.GetOverrideController(animator));
                    }
                    else
                    {
                        RuntimeAnimatorController runtimeAnimatorController = GetRuntimeAnimatorController(animator);
                        return(new GPUAnimatorOverrideController(runtimeAnimatorController, renderer._animations.GetAnimations()));
                    }
                }
Example #4
0
                public override void Initialise(GPUAnimatorRenderer renderer)
                {
                    base.Initialise(renderer);

                    _animator            = GetComponent <Animator>();
                    _skinnedMeshRenderer = GameObjectUtils.GetComponent <SkinnedMeshRenderer>(this.gameObject, true);

                    int numLayers = Math.Max(Math.Min(1 + _numAdditionalLayers, _animator.layerCount), 1);

                    _layers = new GPUAnimatorLayer[numLayers];
                    for (int i = 0; i < _layers.Length; i++)
                    {
                        _layers[i] = new GPUAnimatorLayer(_animator, i);
                    }

                    _animator.runtimeAnimatorController = GPUAnimatorRendererControllerOverrider.GetOverrideController(_renderer, _animator);
                    _animator.avatar = GetDummyAvatar();
                }
 public virtual void Initialise(GPUAnimatorRenderer renderer)
 {
     _initialised = true;
     _renderer    = renderer;
     _onInitialise?.Invoke();
 }