private void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Obstacle")) { EnableRagdoll(); state = PlayerController.CharacterState.Falling; } }
private void Movement() { if (!move) { if (state == PlayerController.CharacterState.Falling) { if (fallCoroutine == null) { fallCoroutine = StartCoroutine(FallCoroutine()); } } return; } if (lookAt != null) { if (state != PlayerController.CharacterState.Running) { mAnimator.SetTrigger("Run"); mRigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ; state = PlayerController.CharacterState.Running; } currentSpeed = (lastPosition - transform.position).magnitude * 10; lastPosition = transform.position; mAnimator.SetFloat("Speed", runSpeed / 7.5f + (currentSpeed)); float distance = Vector3.Distance(transform.position, lookAt.position); if (lookAt.GetComponent <AITargetController>().safe || distance > 3f || distance < 1f) { mAnimator.Play("Run"); mRigidbody.MovePosition(transform.position + (transform.forward * Time.fixedDeltaTime * runSpeed)); } else { mAnimator.Play("Idle"); } var lookPos = lookAt.position - transform.position; lookPos.y = 0; rotation = Quaternion.LookRotation(lookPos); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * turnSpeed); if (transform.position.z > lookAt.position.z - 1) { GetLookAt(); } } else { mRigidbody.constraints = RigidbodyConstraints.FreezeRotation; lookAt.localPosition = Vector3.zero; mAnimator.SetTrigger("Idle"); state = PlayerController.CharacterState.Idle; } }
private void DisableRagdoll() { state = PlayerController.CharacterState.None; foreach (Rigidbody rb in ragdollRB) { rb.isKinematic = true; rb.velocity = Vector3.zero; } FixBones(); mAnimator.enabled = true; mRigidbody.isKinematic = mCollider.isTrigger = false; move = true; }
private void OnTriggerEnter(Collider other) { if (other.CompareTag("Boundary")) { EnableRagdoll(); state = PlayerController.CharacterState.Falling; } if (other.CompareTag("Finish") && move) { move = false; Level.instance.finishedPlayers++; mAnimator.SetTrigger("Dance"); StartCoroutine(Delay(1.5f, () => { transform.GetChild(0).gameObject.SetActive(false); mCollider.isTrigger = mRigidbody.isKinematic = true; Transform pt = Instantiate(Resources.Load <GameObject>("particles/buff"), transform).transform; pt.position = transform.position; })); } }
private void Start() { foreach (Rigidbody rb in ragdollRB) { rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; rb.isKinematic = true; rb.velocity = Vector3.zero; rb.gameObject.layer = 9; } for (int i = 0; i < ragdollRB.Count; i++) { PlayerController.BoneStats stat = new PlayerController.BoneStats(); stat.localEulerAngles = ragdollRB[i].transform.localEulerAngles; stat.localPosition = ragdollRB[i].transform.localPosition; bones.Add(stat); } LevelManager.instance.startEvent.AddListener(() => { move = true; GetLookAt(); }); state = PlayerController.CharacterState.Idle; }