public void ResetRacer() { foreach (Rigidbody ragdoll in ragdollBones) { ragdoll.isKinematic = true; ragdoll.networkView.enabled = false; } this.rigidbody.isKinematic = false; foreach (Collider collider in ragdollColliders) { collider.enabled = false; } dinoAnimator.enabled = true; foreach (Collider collider in playColliders) { collider.enabled = true; } move.enabled = true; ragdollUpdate = empty; if (startPosition != null) { for (int i = 0; i < ragdollBones.Length; i++) { ragdollBones [i].transform.localPosition = startPosition [i]; ragdollBones [i].transform.localRotation = startOrientation [i]; } } }
private void RestoreRacer() { for (int i = 0; i < ragdollBones.Length; i++) { ragdollBones[i].transform.rotation = Quaternion.Slerp(stopPose[i], startPose[i], restored); } restored += Time.deltaTime * (1 / recovery); if (restored >= 1.0F) { restored = 0.0F; Rigidbody shell = this.GetComponent <Rigidbody>(); shell.transform.position = ragdoll.transform.position; ragdollUpdate = ResetRacer; } }
/* ---------------- Private Functions -------------------------- */ private IEnumerator timedRagdoll(float time, float percent) { for (int i = 0; i < ragdollBones.Length; i++) { startPose[i] = ragdollBones[i].rotation; } GoRagdollPartial(percent); yield return(new WaitForSeconds(time)); for (int i = 0; i < ragdollBones.Length; i++) { stopPose[i] = ragdollBones[i].rotation; } RestoreRagdoll(); ragdollUpdate = ResetRacer; }