protected float CalculateShotDeviation(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude) { float recoilShotDeviation = 0; switch (aimingState) { case AimingState.Stand: recoilShotDeviation = m_RecoilGainDeviation; break; case AimingState.Aim: //recoilShotDeviation = m_RecoilAimGainDeviation; recoilShotDeviation = m_RecoilGainDeviation; break; case AimingState.ADS: recoilShotDeviation = m_RecoilADSGainDeviation; break; default: recoilShotDeviation = m_RecoilGainDeviation; break; } m_RecoilShotDeviation += recoilShotDeviation * m_PatternScale * m_ValueClimb; m_RecoilShotDeviation = Mathf.Min(recoilShotDeviation * m_MaxLimitDeviation * m_PatternScale * m_ValueClimb, m_RecoilShotDeviation); return(m_RecoilShotDeviation); }
private void OnEnable() { remainingTime = 0.5f; if (aiming == null) { aiming = GetComponent <AimingState>(); } if (locomotion == null) { locomotion = GetComponent <LocomotionState>(); } if (characterAnimator == null) { characterAnimator = GetComponent <Animator>(); } if (verticalAimingAnimator == null) { verticalAimingAnimator = aiming.aimingRigAnimator; } #region Calculate Target Rotations targetRotationHorizontal = Quaternion.LookRotation(locomotion.ProjectedCameraTransform.forward, Vector3.up); targetRotationHorizontal *= Quaternion.Euler(0f, 45f, 0f); targetRotationVertical = Mathf.Clamp((locomotion.cameraBehaviour.AngleYZ - Mathf.PI / 2) * Mathf.Rad2Deg, -55f, 55f); targetRotationVertical = targetRotationVertical.Remap(-55f, 55f, 0f, 1f); aiming.VerticalAngle = targetRotationVertical; #endregion characterAnimator.SetBool("Aiming", true); }
public float CalculateCrosshair(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude) { var spreadAndDeviation = CalculateSpreadAndDeviation(aimingState, moveState, postureState, velocityMagitude); return(spreadAndDeviation.x + spreadAndDeviation.y); }
private void OnEnable() { if (aiming == null) { aiming = GetComponent <AimingState>(); } if (locomotion == null) { locomotion = GetComponent <LocomotionState>(); } if (characterAnimator == null) { characterAnimator = GetComponent <Animator>(); } if (verticalAimingAnimator == null) { verticalAimingAnimator = aiming.aimingRigAnimator; } //targetRotation = Quaternion.LookRotation(aiming.cameraRig.transform.forward, Vector3.up); characterAnimator.SetBool("Aiming", false); locomotion.cameraBehaviour.gameObject.SetActive(true); SendEvent("AIMING_FORWARD"); }
/* * 计算散布以及偏差 * */ protected Vector2 CalculateSpreadAndDeviation(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude) { float spread = CalculateSpread(aimingState, moveState, postureState, velocityMagitude); float deviation = CalculateDeviation(aimingState, moveState, postureState, velocityMagitude); return(new Vector2(spread, deviation)); }
protected float CalculateDeviation(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude, bool isShoot = false) { float baseDeviation = 0f; float postureModifierDeviation = 1f; float moveDeviation = m_MoveModifierLimitDevation * Mathf.InverseLerp(m_MoveVelocityReferenceDeviation.x / 100, m_MoveVelocityReferenceDeviation.y / 100, velocityMagitude); switch (aimingState) { case AimingState.Stand: baseDeviation = m_BaseDeviation; break; case AimingState.Aim: //baseDeviation = m_BaseAimDeviation; baseDeviation = m_BaseDeviation; break; case AimingState.ADS: baseDeviation = m_BaseADSDeviation; break; default: baseDeviation = m_BaseDeviation; break; } switch (postureState) { case PostureState.Stand: break; case PostureState.Crouch: postureModifierDeviation = m_CrouchModifierDeviation; break; case PostureState.Prone: postureModifierDeviation = m_ProneModifierDeviation; break; default: break; } float deviation = (baseDeviation + m_RecoilShotDeviation) * (1 + moveDeviation) * postureModifierDeviation; return(deviation * 60.0f); }
protected float CalculateSpread(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude) { float baseSpread = m_BaseSpread; if (m_ShotSpread != 0f) { baseSpread *= m_ShotSpread; } float aimingModifierSpread = 1f; float moveModifierSpread = 1f; float postureModifierSpread = 1f; switch (aimingState) { case AimingState.Stand: break; case AimingState.Aim: aimingModifierSpread = m_AimingModifierSpread; break; case AimingState.ADS: aimingModifierSpread = m_ADSModifierSpread; break; default: break; } switch (moveState) { case MoveState.Stand: break; case MoveState.Walk: moveModifierSpread = m_WalkModifierSpread; break; case MoveState.Run: moveModifierSpread = m_RunModifierSpread; break; case MoveState.Jump: moveModifierSpread = m_JumpModifierSpread; break; default: break; } switch (postureState) { case PostureState.Stand: break; case PostureState.Crouch: postureModifierSpread = m_CrouchModifierSpread; break; case PostureState.Prone: postureModifierSpread = m_ProneModifierSpread; break; default: break; } float spread = baseSpread * aimingModifierSpread + m_FiringBaseSpread * postureModifierSpread * moveModifierSpread + m_ShotSpread * 30.0f; return(spread); }