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); }
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; } } }
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); }
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; } }
public void Clear() { motionName = ""; motionMainEntryType = MotionMainEntryType.none; motionFrameDataList = null; }