Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class CarEngine : MonoBehaviour
- {
- public Transform path;
- public float maxSteerAngle = 45f;
- public float turnSpeed = 5f;
- public WheelCollider wheelFL;
- public WheelCollider wheelFR;
- public WheelCollider wheelRL;
- public WheelCollider wheelRR;
- public float maxMotorTorque = 80f;
- public float maxBrakeTorque = 150f;
- public static float currentSpeed;
- public float maxSpeed = 100f;
- public Vector3 centerOfMass;
- public bool isBraking = false;
- public Texture2D textureNormal;
- public Texture2D textureBraking;
- public Renderer carRenderer;
- public CarEngine thisScript;
- public int counter = 0;
- private List<Transform> nodes;
- private int currectNode = 0;
- private float targetSteerAngle = 0;
- private void Start()
- {
- counter = 0;
- GetComponent<Rigidbody>().centerOfMass = centerOfMass;
- thisScript = GetComponent<CarEngine>();
- Transform[] pathTransforms = path.GetComponentsInChildren<Transform>();
- nodes = new List<Transform>();
- for (int i = 0; i < pathTransforms.Length; i++)
- {
- if (pathTransforms[i] != path.transform)
- {
- nodes.Add(pathTransforms[i]);
- }
- }
- }
- private void FixedUpdate()
- {
- if (currectNode == 1 && counter > 3)
- {
- isBraking = true;
- Braking();
- wheelRL.brakeTorque = 100000;
- wheelRR.brakeTorque = 100000;
- wheelFL.brakeTorque = 100000;
- wheelFR.brakeTorque = 100000;
- print("stop");
- GetComponent<CarEngine>().enabled = false;
- // disable scritp
- }
- else
- {
- ApplySteer();
- Drive();
- CheckWaypointDistance();
- Braking();
- LerpToSteerAngle();
- }
- }
- private void ApplySteer()
- {
- Vector3 relativeVector = transform.InverseTransformPoint(nodes[currectNode].position);
- float newSteer = (relativeVector.x / relativeVector.magnitude) * maxSteerAngle;
- targetSteerAngle = newSteer;
- }
- private void Drive()
- {
- currentSpeed = 2 * Mathf.PI * wheelFL.radius * wheelFL.rpm * 60 / 1000;
- if (currentSpeed < maxSpeed && !isBraking)
- {
- wheelFL.motorTorque = maxMotorTorque;
- wheelFR.motorTorque = maxMotorTorque;
- }
- else
- {
- wheelFL.motorTorque = 0;
- wheelFR.motorTorque = 0;
- }
- }
- private void CheckWaypointDistance()
- {
- if (Vector3.Distance(transform.position, nodes[currectNode].position) < 6f)
- {
- if (currectNode == nodes.Count - 1)
- {
- currectNode = 0;
- counter++;
- }
- else
- {
- counter++;
- currectNode++;
- }
- }
- }
- private void Braking()
- {
- if (isBraking)
- {
- carRenderer.material.mainTexture = textureBraking;
- wheelRL.brakeTorque = maxBrakeTorque;
- wheelRR.brakeTorque = maxBrakeTorque;
- }
- else
- {
- carRenderer.material.mainTexture = textureNormal;
- wheelRL.brakeTorque = 0;
- wheelRR.brakeTorque = 0;
- }
- }
- private void LerpToSteerAngle()
- {
- wheelFL.steerAngle = Mathf.Lerp(wheelFL.steerAngle, targetSteerAngle, Time.deltaTime * turnSpeed);
- wheelFR.steerAngle = Mathf.Lerp(wheelFR.steerAngle, targetSteerAngle, Time.deltaTime * turnSpeed);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement