コード例 #1
0
        /// <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();
                }
            }
        }