public string AcquireMatchedMotion(string motionName, float velocity, Vector3 direction, float acceleration, float brake, float normalizedTime, bool crouch)
    {
        if (currentComputeTime >= motionMatcherSettings.ComputeMotionsBestCostGap)
        {
            currentComputeTime = 0;
            motionDebugDataList.Clear();

            MotionMainEntryType motionMainEntryType = MotionMainEntryType.none;
            if (bCrouch != crouch)
            {
                bCrouch             = crouch;
                motionMainEntryType = crouch ? MotionMainEntryType.crouch : MotionMainEntryType.stand;
            }
            lastVelocity = velocity;
            CapturePlayingMotionSnapShot(motionName, velocity, direction, acceleration, brake, normalizedTime, motionMainEntryType);
            if (motionMatcherSettings.EnableDebugText)
            {
                AddDebugContent("Cost", true);
            }
            ComputeMotionsBestCost();
            costText.text = textContent;
            //Debug.LogFormat("AcquireMatchedMotion velocity {0} MotionName {1} direction {2}", velocity, MotionName, direction);
        }

        return(bestMotionName);
    }
Exemple #2
0
    private void CapturePlayingMotionSnapShot(PlayerInput playerInput, string motionName, float normalizedTime, MotionMainEntryType motionMainEntryType)
    {
        float   velocity        = playerInput.velocity;
        float   angularVelocity = playerInput.angularVelocity;
        Vector3 direction       = playerInput.direction;
        float   acceleration    = playerInput.acceleration;
        float   brake           = playerInput.brake;

        MotionFrameData bakedMotionFrameData = AcquireBakedMotionFrameData(motionName, normalizedTime, motionMainEntryType);

        currentMotionFrameData.velocity                 = velocity;
        currentMotionFrameData.motionBoneDataList       = bakedMotionFrameData.motionBoneDataList;
        currentMotionFrameData.motionTrajectoryDataList = new MotionTrajectoryData[motionMatcherSettings.predictionTrajectoryTimeList.Length];

        for (int i = 0; i < motionMatcherSettings.predictionTrajectoryTimeList.Length; i++)
        {
            float predictionTrajectoryTime = motionMatcherSettings.predictionTrajectoryTimeList[i];
            currentMotionFrameData.motionTrajectoryDataList[i] = new MotionTrajectoryData();
            MotionTrajectoryData motionTrajectoryData = currentMotionFrameData.motionTrajectoryDataList[i];
            motionTrajectoryData.localPosition = velocity * direction * predictionTrajectoryTime;
            motionTrajectoryData.velocity      = velocity * direction;
            if (Mathf.Abs(playerInput.angularVelocity) > 0)
            {
                motionTrajectoryData.direction = Quaternion.Euler(0, playerInput.angularVelocity * predictionTrajectoryTime, 0) * Vector3.forward;
            }
        }
    }
Exemple #3
0
    private MotionFrameData AcquireBakedMotionFrameData(string motionName, float normalizedTime, MotionMainEntryType motionMainEntryType)
    {
        MotionFrameData motionFrameData = null;

        for (int i = 0; i < motionsData.motionDataList.Length; i++)
        {
            MotionData motionData = motionsData.motionDataList[i];
            if (motionMainEntryType != MotionMainEntryType.none)
            {
                if (motionData.motionName.IndexOf(motionMatcherSettings.StandTag) >= 0 &&
                    motionMainEntryType == MotionMainEntryType.stand)
                {
                    motionFrameData = motionData.motionFrameDataList[0];
                    break;
                }
                if (motionData.motionName.IndexOf(motionMatcherSettings.CrouchTag) >= 0 &&
                    motionMainEntryType == MotionMainEntryType.crouch)
                {
                    motionFrameData = motionData.motionFrameDataList[0];
                    break;
                }
            }
            else if (motionData.motionName == motionName)
            {
                int frame = Mathf.FloorToInt(motionData.motionFrameDataList.Length * normalizedTime);
                motionFrameData = motionData.motionFrameDataList[frame];
            }
        }
        return(motionFrameData);
    }
Exemple #4
0
    private float AcquireBakedMotionVelocity(string motionName, float normalizedTime, MotionMainEntryType motionMainEntryType)
    {
        MotionFrameData motionFrameData = AcquireBakedMotionFrameData(motionName, normalizedTime, motionMainEntryType);

        if (motionFrameData != null)
        {
            return(motionFrameData.velocity);
        }
        return(0);
    }
    private void CapturePlayingMotionSnapShot(string motionName, float velocity, Vector3 direction, float acceleration, float brake, float normalizedTime, MotionMainEntryType motionMainEntryType)
    {
        MotionFrameData bakedMotionFrameData = AcquireBakedMotionFrameData(motionName, normalizedTime, motionMainEntryType);

        currentMotionFrameData.velocity                 = velocity;
        currentMotionFrameData.motionBoneDataList       = bakedMotionFrameData.motionBoneDataList;
        currentMotionFrameData.motionTrajectoryDataList = new MotionTrajectoryData[motionMatcherSettings.predictionTrajectoryTimeList.Length];
        float   LastPredictionTrajectoryTime = 0;
        Vector3 LastPredictionPosition       = Vector3.zero;

        for (int i = 0; i < motionMatcherSettings.predictionTrajectoryTimeList.Length; i++)
        {
            float predictionTrajectoryTime = motionMatcherSettings.predictionTrajectoryTimeList[i];
            float deltaTime = predictionTrajectoryTime - LastPredictionTrajectoryTime;
            currentMotionFrameData.motionTrajectoryDataList[i] = new MotionTrajectoryData();
            MotionTrajectoryData motionTrajectoryData = currentMotionFrameData.motionTrajectoryDataList[i];
            motionTrajectoryData.localPosition = LastPredictionPosition + velocity * direction * deltaTime;
            motionTrajectoryData.velocity      = velocity * direction;
            motionTrajectoryData.direction     = direction;
            LastPredictionTrajectoryTime       = predictionTrajectoryTime;
            LastPredictionPosition             = motionTrajectoryData.localPosition;
        }
    }
Exemple #6
0
 public void Clear()
 {
     motionName          = "";
     motionMainEntryType = MotionMainEntryType.none;
     motionFrameDataList = null;
 }