private void InitializeMachineFor(AnimatorStateMachine machine, string proxyParam, string liveParam, string handParam, string clipPath) { var waiting = machine.AddState("Waiting", SharedLayerUtils.GridPosition(1, 1)); waiting.timeParameter = proxyParam; waiting.timeParameterActive = true; waiting.motion = AssetDatabase.LoadAssetAtPath <AnimationClip>(clipPath); waiting.speed = 1; waiting.writeDefaultValues = _writeDefaultsForAnimatedAnimatorParameterStates; var listening = machine.AddState("Listening", SharedLayerUtils.GridPosition(1, 2)); listening.timeParameter = liveParam; listening.timeParameterActive = true; listening.motion = AssetDatabase.LoadAssetAtPath <AnimationClip>(clipPath); listening.speed = 1; listening.writeDefaultValues = _writeDefaultsForAnimatedAnimatorParameterStates; var toListening = waiting.AddTransition(listening); SetupTransition(toListening); toListening.AddCondition(AnimatorConditionMode.Equals, 1, handParam); var toWaiting = listening.AddTransition(waiting); SetupTransition(toWaiting); toWaiting.AddCondition(AnimatorConditionMode.NotEqual, 1, handParam); }
private AnimatorState CreateSuspendState(AnimatorStateMachine machine, AnimationClip emptyClip) { var enableBlinking = machine.AddState("SuspendBlinking", SharedLayerUtils.GridPosition(1, 1)); enableBlinking.motion = emptyClip; enableBlinking.writeDefaultValues = _writeDefaultsForLogicalStates; return(enableBlinking); }
public void Create() { EditorUtility.DisplayProgressBar("GestureCombo", "Clearing lipsync override layer", 0f); var machine = ReinitializeLayer(); if (!_manifestBindings.Any(manifest => manifest.Manifest.RequiresLimitedLipsync())) { return; } var none = machine.AddState("None", SharedLayerUtils.GridPosition(0, 0)); none.motion = _emptyClip; none.writeDefaultValues = false; var noneTransition = machine.AddAnyStateTransition(none); SetupLipsyncTransition(noneTransition); noneTransition.canTransitionToSelf = false; noneTransition.duration = _limitedLipsync.transitionDuration; noneTransition.AddCondition(AnimatorConditionMode.Less, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide"); _assetContainer.RemoveAssetsStartingWith("zAutogeneratedLipsync_", typeof(AnimationClip)); var regularVisemeClips = CreateRegularClips(); var wideVisemeClips = CreateWideClips(); AssetContainer.GlobalSave(); for (var visemeNumber = 0; visemeNumber < wideVisemeClips.Count; visemeNumber++) { var state = machine.AddState("Wide " + visemeNumber, SharedLayerUtils.GridPosition(4, 2 + visemeNumber)); state.motion = wideVisemeClips[visemeNumber]; state.writeDefaultValues = _writeDefaultsForLipsyncBlendshapes; var transition = machine.AddAnyStateTransition(state); SetupLipsyncTransition(transition); transition.canTransitionToSelf = false; transition.duration = _limitedLipsync.transitionDuration * FindVisemeTransitionTweak(visemeNumber); transition.AddCondition(AnimatorConditionMode.Equals, visemeNumber, "Viseme"); transition.AddCondition(AnimatorConditionMode.Greater, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide"); } for (var visemeNumber = 0; visemeNumber < regularVisemeClips.Count; visemeNumber++) { var state = machine.AddState("Regular " + visemeNumber, SharedLayerUtils.GridPosition(-4, 2 + visemeNumber)); state.motion = regularVisemeClips[visemeNumber]; state.writeDefaultValues = _writeDefaultsForLipsyncBlendshapes; var transition = machine.AddAnyStateTransition(state); SetupLipsyncTransition(transition); transition.canTransitionToSelf = false; transition.duration = _limitedLipsync.transitionDuration * FindVisemeTransitionTweak(visemeNumber); transition.AddCondition(AnimatorConditionMode.Equals, visemeNumber, "Viseme"); transition.AddCondition(AnimatorConditionMode.Less, _analogBlinkingUpperThreshold, "_Hai_GestureAnimLSWide"); } }
public void Create() { EditorUtility.DisplayProgressBar("GestureCombo", "Clearing expressions layer", 0f); var machine = ReinitializeLayer(); var defaultState = machine.AddState("Default", SharedLayerUtils.GridPosition(-1, -1)); defaultState.motion = _emptyClip; defaultState.writeDefaultValues = _conflictPrevention.ShouldWriteDefaults; if (_activityStageName != null) { CreateTransitionWhenActivityIsOutOfBounds(machine, defaultState); } var activityManifests = _manifestBindings; EditorUtility.DisplayProgressBar("GestureCombo", "Generating animations", 0f); _assetContainer.RemoveAssetsStartingWith("zAutogeneratedExp" + _animInfix + "_", typeof(AnimationClip)); _assetContainer.RemoveAssetsStartingWith("zAutogeneratedPup" + _animInfix + "_", typeof(BlendTree)); activityManifests = new AnimationNeutralizer( activityManifests, _compilerConflictFxLayerMode, _compilerIgnoreParamList, _compilerFallbackParamList, _blinkBlendshapes, _assetContainer, _conflictPrevention.ShouldGenerateExhaustiveAnimations, _emptyClip, Feature(FeatureToggles.DoNotFixSingleKeyframes) ).NeutralizeManifestAnimations(); // The blend tree auto weight corrector assumes that all of the Manifests' blend trees have been autogenerated. // This remains true as long as the Animation Neutralizer is executed before this. activityManifests = new CgeBlendTreeAutoWeightCorrector(activityManifests, _useGestureWeightCorrection, _useSmoothing, _assetContainer) .MutateAndCorrectExistingBlendTrees(); foreach (var parameter in AllParametersUsedByManifests(activityManifests)) { SharedLayerUtils.CreateParamIfNotExists(_animatorController, parameter, AnimatorControllerParameterType.Float); } var combinator = new IntermediateCombinator(activityManifests); new GestureCExpressionCombiner( _animatorController, machine, combinator.IntermediateToTransition, _activityStageName, _conflictPrevention.ShouldWriteDefaults, _useGestureWeightCorrection, _useSmoothing ).Populate(); }
private AnimatorState CreateBlinkingState(AnimatorStateMachine machine, VRC_AnimatorTrackingControl.TrackingType type, AnimationClip emptyClip) { var enableBlinking = machine.AddState(type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? "EnableBlinking" : "DisableBlinking", SharedLayerUtils.GridPosition(type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? 0 : 2, 3)); enableBlinking.motion = emptyClip; enableBlinking.writeDefaultValues = _writeDefaultsForLogicalStates; var tracking = enableBlinking.AddStateMachineBehaviour <VRCAnimatorTrackingControl>(); tracking.trackingEyes = type; return(enableBlinking); }