void Update() { if (transform.position != destination) { Vector3 destinationDirection = destination - transform.position; destinationDirection.y = 0; float destinationDistance = destinationDirection.magnitude; movementSpeed = Random.Range(0.9f, 1f); if (destinationDistance >= stopDistance) { reachedDestination = false; Quaternion targetRotation = Quaternion.LookRotation(destinationDirection); transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime); transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime); velocity = (transform.position - lastPosition) / Time.deltaTime; velocity.y = 0; var velocityMagnitude = velocity.magnitude; velocity = velocity.normalized; var fwdDotProduct = Vector3.Dot(transform.forward, velocity); var rightDotProduct = Vector3.Dot(transform.right, velocity); animator.SetFloat("MovementX", rightDotProduct); animator.SetFloat("MovementSpeed", -fwdDotProduct); } else { reachedDestination = true; } } else { reachedDestination = true; } if (isRagdoll) { knockDownTimer.Tick(); Vector3 pos = this.transform.position; //needs work, animator overrides character position after ragdoll if (knockDownTimer.ready) { isRagdoll = false; animator.enabled = true; transform.position = pos; knockDownTimer.Reset(); } } }
private void Update() { if (playerObject != null && !exiting && !isDriving) { NavigateToVehicle(); if (entering) { Debug.Log("enter timer start"); animWaitTimer.Tick(); if (animWaitTimer.ready) { //move player object under vehicle playerObject.transform.parent = chassis.transform; StartCar(); isDriving = true; playerInteraction.isDriving = true; entering = false; animWaitTimer.Reset(); } } } else if (exiting) { exitWaitTimer.Tick(); if (exitWaitTimer.ready) { exitWaitTimer.Reset(); Debug.Log("exit timer ready"); Disembark(); } } if (isDriving && !entering && !exiting) { playerObject.transform.position = driverSeat.position; playerObject.transform.Rotate(transform.forward); } }
private void StallCheck() { var pos = transform.position; stallTimer.Tick(); if (stallTimer.ready && currentSpeed < 5f && leadingVehicle == null) { stallReverseTimer.Tick(); recoveryExpiredTimer.Tick(); if (!recoveryCheck) { recoveryCheck = true; pos = transform.position; } isBraking = false; //skipWaypointCounter++; wheelFL.motorTorque = -80; wheelFR.motorTorque = -80; targetSteerAngle = randomSteerAngle; if (Vector3.Distance(pos, transform.position) > 3) { if (targetSteerAngle >= 1) { targetSteerAngle -= 20f; } else if (targetSteerAngle <= -1) { targetSteerAngle += 20f; } recoveryCheck = false; stallTimer.Reset(); stallReverseTimer.Reset(); recoveryExpiredTimer.Reset(); } else if (recoveryExpiredTimer.ready) { recoveryCheck = false; stallTimer.Reset(); stallReverseTimer.Reset(); recoveryExpiredTimer.Reset(); } if (stallReverseTimer.ready) { //reset all stallTimer.Reset(); stallReverseTimer.Reset(); recoveryExpiredTimer.Reset(); randomSteerAngle = Random.Range(-45f, 45f); } /* * if (skipWaypointCounter == 2) * { * if (currentNode == nodes.Count - 1) * { * skipWaypointCounter = 0; * currentNode = 0; * } * else * { * skipWaypointCounter = 0; * currentNode++; * } * } */ } else if (currentSpeed >= 30) { stallTimer.Reset(); stallReverseTimer.Reset(); recoveryExpiredTimer.Reset(); recoveryCheck = false; } }