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); }
public void CacheOverrideClips() { List <AnimationClip> clips = new List <AnimationClip>(); for (int i = 0; i < _controllers.Length; i++) { if (_controllers[i] != null) { foreach (AnimationClip clip in _controllers[i].animationClips) { if (clip != null && !clips.Contains(clip)) { clips.Add(clip); } } } } _overrideClips = new AnimationClipData[clips.Count]; for (int i = 0; i < _overrideClips.Length; i++) { _overrideClips[i] = new AnimationClipData() { _originalClip = clips[i], _overrideClip = GPUAnimatorOverrideController.CreateOverrideClip(clips[i]) }; } }