public virtual Vector3 CalculateAngularVelocity() { if (MotionClip != null && MotionClip.rotateType == EMotionType.MT_Override) { return(MotionClip.GetAngularVelocity()); } if (RootMotionClip != null && RootMotionClip.rotateType == EMotionType.MT_Override) { return(RootMotionClip.GetAngularVelocity()); } Vector3 res = Vector3.zero; if (MotionClip is object) { res += MotionClip.GetAngularVelocity(); } if (RootMotionClip is object) { res += RootMotionClip.GetAngularVelocity(); } if (Controller is object) { res += Controller.GetInputAngularVelocity(); } return(res); }
public virtual Vector3 CalculateVeloctiy() { if (MotionClip != null && MotionClip.motionType == EMotionType.MT_Override) { return(MotionClip.GetVelocity()); } if (RootMotionClip != null && RootMotionClip.motionType == EMotionType.MT_Override) { return(RootMotionClip.GetVelocity()); } // 计算重力 if (CharacterController.isGrounded) { Gravity = Physics.gravity; } else { Gravity += Physics.gravity * Time.fixedDeltaTime; } Vector3 res = Vector3.zero; if (MotionClip is object) { res += MotionClip.GetVelocity(); } if (RootMotionClip is object) { res += RootMotionClip.GetVelocity(); } if (Controller is object) { Vector3 inputVelocity = Controller.GetInputVelocity(); res += inputVelocity; if (IsDirectVelocity && inputVelocity.sqrMagnitude >= 0.1f) { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(inputVelocity, Vector3.up), Time.fixedDeltaTime * 10); } } return(res); }
private void Awake() { CharacterController = GetComponent <CharacterController>(); MotionClip = new MotionClip(transform); RootMotionClip = new RootMotionClip(GetComponentInChildren <Animator>()); }