/// <summary> /// Step 5: Ensure that all of the required SSMs have been created on the animator controller /// </summary> /// <param name="rMotionController"></param> /// <param name="rFolderPath"></param> /// <param name="rCharacterName"></param> protected virtual void VerifyAnimatorConfiguration(MotionController rMotionController, string rFolderPath, string rCharacterName) { string lProgressTitle = "Configuring Animator (Step 5 of 6)"; float lProgressAmount = 4f / 6f; EditorUtility.DisplayProgressBar(lProgressTitle, "Basic animator states", lProgressAmount); AnimatorController lController = null; if (CreateNewAnimator) { if (!rFolderPath.EndsWith("/")) { rFolderPath += "/"; } string lAnimatorPath; if (AnimatorUsesCharacterName) { lAnimatorPath = rFolderPath + rCharacterName; } else if (AnimatorUsesProfileName) { lAnimatorPath = rFolderPath + this.name; } else { lAnimatorPath = rFolderPath + AnimatorName; } if (!lAnimatorPath.EndsWith(".controller")) { lAnimatorPath += ".controller"; } lController = AnimatorSetupHelper.EnsureAnimatorController(rMotionController, lAnimatorPath, mLastLayerIndex); AnimatorController = lController; } if (!ConfigureAnimator) { return; } // Verify the base Animator Controller configuration lController = AnimatorSetupHelper.EnsureAnimatorController(rMotionController, mLastLayerIndex); // Verify the SSMs for all Basic motions BasicMotionPackDefinition.EnsureBaseLayerStartState(lController); BasicMotionPackDefinition.EnsureBasicIdleSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicWalkRunPivotSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicWalkRunStrafeSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicDamagedSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicDeathSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicInteractionSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicJumpSSM(lController, 0); BasicMotionPackDefinition.EnsureBasicDodgeSSM(lController, 0); // Verify the SSMs for the "standard" motion set if (AddJumpMotions) { BasicMotionPackDefinition.EnsureStandardJump(rMotionController, 0); } if (AddClimbMotions) { BasicMotionPackDefinition.EnsureStandardClimb_0_5m(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimb_1m(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimb_1_8m(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimb_2_5m(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimbLadder(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimbWall(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardClimbLedge(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardVault_1m(rMotionController, 0); } if (AddUtilityMotions) { BasicMotionPackDefinition.EnsureStandardBalanceWalk(rMotionController, 0); BasicMotionPackDefinition.EnsureStandardUtilities(rMotionController, 0); } if (Modules == null) { return; } int lModuleCount = Modules.Count(x => x is IConfigureAnimator); // fill additional 20% of progress bar across all modules float lModuleAmount = lModuleCount > 0 ? 0.2f / lModuleCount : 0; foreach (var lModule in Modules) { if (lModule.IsValid && lModule is IConfigureAnimator) { lProgressAmount += lModuleAmount; EditorUtility.DisplayProgressBar(lProgressTitle, lModule.Name, lProgressAmount); ((IConfigureAnimator)lModule).ConfigureAnimator(); } } }