/// <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(); } } }
/// <summary> /// Step 3: Create and configure the selected motions on the character /// </summary> /// <param name="rMotionController"></param> /// <param name="rIsPlayer"></param> protected virtual void CreateMotions(MotionController rMotionController, bool rIsPlayer) { string lProgressTitle = "Configuring Motions (Step 3 of 6)"; float lProgressAmount = 3f / 6f; EditorUtility.DisplayProgressBar(lProgressTitle, "Basic motions", lProgressAmount); if (AddBasicMotions) { MotionSetupHelper.EnsureMotionLayers(rMotionController, mLastLayerIndex); if (rIsPlayer) { BasicMotionPackDefinition.CreateBasicLocomotion(rMotionController, false, MovementStyle); } else { BasicMotionPackDefinition.CreateBasicNPCLocomotion(rMotionController, true); } if (AddInteraction) { BasicMotionPackDefinition.CreateInteractions(rMotionController); } if (AddFullBodyReactions) { BasicMotionPackDefinition.CreateBasicDamagedMotion(rMotionController, true); BasicMotionPackDefinition.CreateBasicDeathMotion(rMotionController, true); } if (AddUtilityMotions) { BasicMotionPackDefinition.CreateUtilityMotions(rMotionController, true); } } if (AddJumpMotions) { BasicMotionPackDefinition.CreateJumpMotions(rMotionController); } if (AddClimbMotions) { BasicMotionPackDefinition.CreateClimbMotions(rMotionController, ClimbLayers); if (rIsPlayer) { BasicMotionPackDefinition.CreateClimbLadderMotion(rMotionController, ClimbLadderLayers); BasicMotionPackDefinition.CreateVaultMotion(rMotionController, VaultLayers, true); } } //if (UseHandPoses) //{ // BasicMotionPackDefinition.CreateBasicHandPoseMotions(rMotionController); //} if (Modules == null) { return; } foreach (var lModule in Modules) { if (lModule.IsValid && lModule is IConfigureMotions) { EditorUtility.DisplayProgressBar(lProgressTitle, lModule.Name, lProgressAmount); ((IConfigureMotions)lModule).ConfigureMotions(); } } }