// Update is called once per frame void Update() { FollowTracker(); ai_drive.CheckForSkid(); ai_drive.CalculateEngineSound(); }
// Update is called once per frame void Update() { Vector3 localTarget = drive.gameObject.transform.InverseTransformDirection(target); float distanceToTarget = Vector3.Distance(target, drive.gameObject.transform.position); float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(drive.currentSpeed); float accel = 0.5f; float brake = 0; if (distanceToTarget < 5) { brake = 0.8f; accel = 0.1f; } drive.Go(accel, steer, brake); if (distanceToTarget < 2) //threshold, make larger if car starts to circle waypoint { currentWayPoint++; if (currentWayPoint >= circuit.Waypoints.Length) { currentWayPoint = 0; } target = circuit.Waypoints[currentWayPoint].transform.position; } drive.CheckForSkid(); drive.CalculateEngineSound(); }
// Update is called once per frame void Update() { if (cpManager == null) { cpManager = m_drive.rb.gameObject.GetComponent <CheckpointManager>(); } if (cpManager.lap >= RaceMonitor.totalLaps + 1) { m_drive.highAccelSound.mute = true; m_drive.skidSound.mute = true; m_drive.CarMove(0, finishSteer, 0.5f); return; } float vertical = Input.GetAxis("Vertical"); //Keyboard Input float horizontal = Input.GetAxis("Horizontal"); //Keyboard Input float brake = Input.GetAxis("Jump"); //Keyboard Input if (m_drive.rb.velocity.magnitude > 1 || !RaceMonitor.racing) { lastTimeMoving = Time.time; } /*RaycastHit hit; * if(Physics.Raycast(m_drive.rb.gameObject.transform.position,-Vector3.up,out hit,10)) * { * if(hit.collider.gameObject.tag == "Road") * { * lastPosition = m_drive.rb.gameObject.transform.position; * lastRotation = m_drive.rb.gameObject.transform.rotation; * } * }*/ if (Time.time > (lastTimeMoving + 4) || m_drive.rb.gameObject.transform.position.y < -5) { m_drive.rb.gameObject.transform.position = cpManager.lastCP.transform.position + Vector3.up * 2; m_drive.rb.gameObject.transform.rotation = cpManager.lastCP.transform.rotation; //m_drive.rb.gameObject.transform.position = lastPosition; //m_drive.rb.gameObject.transform.rotation = lastRotation; m_drive.rb.gameObject.layer = 8; this.GetComponent <Ghost>().enabled = true; Invoke("ResetLayer", 3); } if (!RaceMonitor.racing) { vertical = 0; } m_drive.CarMove(vertical, horizontal, brake); m_drive.CheckForSkid(); m_drive.CalculateEngineSound(); }
// Update is called once per frame void Update() { float a = Input.GetAxis("Vertical"); float s = Input.GetAxis("Horizontal"); float b = Input.GetAxis("Jump"); ds.Go(a, s, b); ds.CheckForSkid(); ds.CalculateEngineSound(); }
void Update() { if (cpm == null) { cpm = ds.rb.GetComponent <CheckpointManager>(); } if (cpm.lap == RaceMonitor.totalLaps + 1) { ds.highAccel.Stop(); ds.Go(0.0f, finishSteer, 0.0f); } float a = Input.GetAxis("Vertical"); float s = Input.GetAxis("Horizontal"); float b = Input.GetAxis("Jump"); if (ds.rb.velocity.magnitude > 1.0f || !RaceMonitor.racing) { lastTimeMoving = Time.time; } RaycastHit hit; if (Physics.Raycast(ds.rb.gameObject.transform.position, -Vector3.up, out hit, 10)) { if (hit.collider.gameObject.tag == "road") { lastPosition = ds.rb.gameObject.transform.position; lastRotation = ds.rb.gameObject.transform.rotation; } } if (Time.time > lastTimeMoving + 4 || ds.rb.gameObject.transform.position.y < -5.0f) { ds.rb.gameObject.transform.position = cpm.lastCP.transform.position + Vector3.up * 2; ds.rb.gameObject.transform.rotation = cpm.lastCP.transform.rotation; ds.rb.gameObject.layer = 8; this.GetComponent <Ghost>().enabled = true; Invoke("ResetLayer", 3); } if (!RaceMonitor.racing) { a = 0.0f; } ds.Go(a, s, b); ds.CheckForSkid(); ds.CalculateEngineSound(); }
// Update is called once per frame void Update() { Vector3 localTarget = ds.rb.gameObject.transform.InverseTransformPoint(target); Vector3 nextLocalTarget = ds.rb.gameObject.transform.InverseTransformPoint(nextTarget); float distanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float nextTargetAngle = Mathf.Atan2(nextLocalTarget.x, nextLocalTarget.z) * Mathf.Rad2Deg; float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(ds.currentSpeed); float distanceFactor = distanceToTarget / totalDistanceToTarget; float speedFactor = ds.currentSpeed / ds.maxSpeed; float accel = 1f; float brake = Mathf.Lerp((-1 - Mathf.Abs(nextTargetAngle)) * brakingSensitivity, 1 + speedFactor, 1 - distanceFactor); Debug.Log("Brake: " + brake + " Accel: " + accel + " Speed: " + ds.rb.velocity.magnitude); // if(distanceToTarget < 5) { brake = 0.7f; accel = 0.3f; } ds.Go(accel, steer, brake); if (distanceToTarget < 4) // threshold, make larger if car starts to circle waypoint { currentWP++; if (currentWP >= circuit.waypoints.Length) { currentWP = 0; } target = circuit.waypoints[currentWP].transform.position; nextTarget = circuit.waypoints[currentWP + 1].transform.position; totalDistanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); } ds.CheckForSkid(); ds.CalculateEngineSound(); }
// Update is called once per frame void Update() { if (cpm == null) { cpm = ds.rb.GetComponent <CheckpointManager>(); } // Player stopping at lap finish if (cpm.lap == RaceMonitor.totalLaps + 1) { ds.highAccel.Stop(); ds.Go(0, finishSteer, 0f); return; } float a = Input.GetAxis("Vertical"); float s = Input.GetAxis("Horizontal"); float b = Input.GetAxis("Jump"); if (ds.rb.velocity.magnitude > 1 || !RaceMonitor.racing) { lastTimeMoving = Time.time; } RaycastHit hit; Vector3 downwards = transform.TransformDirection(-Vector3.up); if (Physics.Raycast(ds.rb.transform.position, downwards, out hit, 10f)) { //Debug.DrawRay(rb.transform.position, downwards * 10, Color.yellow); //Debug.LogWarning("tag : " + hit.collider.tag); string colliderTag = hit.collider.tag; if (colliderTag == "road") { //capture last road positions lastPosition = ds.rb.gameObject.transform.position; lastRotation = ds.rb.gameObject.transform.rotation; } } // reset car if stuck for 4 seconds if (Time.time > lastTimeMoving + 4 || ds.rb.gameObject.transform.position.y < -5f || ds.rb.gameObject.transform.position.y > 25f) { ds.rb.gameObject.transform.position = cpm.lastCp.transform.position + Vector3.up * 2; ds.rb.gameObject.transform.rotation = cpm.lastCp.transform.rotation; ds.rb.gameObject.layer = 8; this.GetComponent <Ghost>().enabled = true; Invoke(nameof(ResetLayer), 3f); } // this stop car movement and steering during the countdown if (!RaceMonitor.racing) { a = 0; s = 0; b = 0; } ds.Go(a, s, b); ds.CheckForSkid(); ds.CalculateEngineSound(); }
// Update is called once per frame void Update() { if (!RaceMonitor.racing) { lastTimeMoving = Time.time; return; } if (cpm == null) { cpm = ds.rb.GetComponent <CheckpointManager>(); } if (cpm.lap == RaceMonitor.totalLaps + 1) { ds.highAccel.Stop(); ds.Go(0, finishSteer, 0); return; } ProgressTracker(); Vector3 localTarget; float targetAngle; if (ds.rb.velocity.magnitude > 1) { lastTimeMoving = Time.time; } if (Time.time > lastTimeMoving + 4 || ds.rb.gameObject.transform.position.y < -5 || ds.rb.gameObject.transform.position.y > 10) { ds.rb.gameObject.transform.position = cpm.lastCP.transform.position; ds.rb.gameObject.transform.rotation = cpm.lastCP.transform.rotation; tracker.transform.position = cpm.lastCP.transform.position; ds.rb.gameObject.layer = 8; this.GetComponent <Ghost>().enabled = true; Invoke("ResetLayer", 3); } if (Time.time < ds.rb.GetComponent <AvoidDetector>().avoidTime) { localTarget = tracker.transform.right * ds.rb.GetComponent <AvoidDetector>().avoidPath; } else { localTarget = ds.rb.gameObject.transform.InverseTransformPoint(tracker.transform.position); } targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(ds.CurrentSpeed); float speedFactor = ds.CurrentSpeed / ds.maxSpeed; float corner = Mathf.Clamp(Mathf.Abs(targetAngle), 0, 90); float cornerFactor = corner / 90.0f; float brake = 0; if (corner > 10 && speedFactor > 0.1f) { brake = Mathf.Lerp(0, 1 + speedFactor * brakingSensitivity, cornerFactor); } float accel = 1f; if (corner > 20 && speedFactor > 0.2f) { accel = Mathf.Lerp(0, 1 * accellerationSensitivity, 1 - cornerFactor); } float prevTorque = ds.torque; if (speedFactor < 0.3f && ds.rb.gameObject.transform.forward.y > 0.1f) { ds.torque *= 3.0f; accel = 1f; brake = 0; } ds.Go(accel, steer, brake); ds.CheckForSkid(); ds.CalculateEngineSound(); ds.torque = prevTorque; }
// Update is called once per frame void Update() { if (!RaceMonitor.racing) { lastTimeMoving = Time.time; return; } if (cpm == null) { cpm = ds.rb.GetComponent <CheckpointManager>(); } // Ai stopping at finish end if (cpm.lap == RaceMonitor.totalLaps + 1) { ds.highAccel.Stop(); ds.Go(0, finishSteer, 0f); return; } ProgressTracker(); Vector3 localTarget; float targetAngle; if (ds.rb.velocity.magnitude > 1) { lastTimeMoving = Time.time; } if (Time.time > lastTimeMoving + 4 || ds.rb.gameObject.transform.position.y < -5f || ds.rb.gameObject.transform.position.y > 25f) { ds.rb.transform.position = cpm.lastCp.transform.position + Vector3.up * 2 + new Vector3(Random.Range(-8, 8), 0, 0); ds.rb.transform.rotation = cpm.lastCp.transform.rotation; tracker.transform.position = cpm.lastCp.transform.position; ds.rb.gameObject.layer = 8; this.GetComponent <Ghost>().enabled = true; Invoke("ResetLayer", 3); } if (Time.time < ds.rb.GetComponent <AvoidDetector>().avoidTime) { localTarget = tracker.transform.right * ds.rb.GetComponent <AvoidDetector>().avoidPath; } else { localTarget = ds.rb.gameObject.transform.InverseTransformPoint(tracker.transform.position); } targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(ds.currentSpeed); float speedFactor = ds.currentSpeed / ds.maxSpeed; float corner = Mathf.Clamp(Mathf.Abs(targetAngle), 0, 90); //Debug.LogWarning("name " + gameObject.name +" corner angle: " + corner); float cornerFactor = corner / 90.0f; float brake = 0f; float accel = 1f; if (corner > 5 && speedFactor > 0.3f) { brake = Mathf.Lerp(0, 1 + (speedFactor * speedFactor) * (brakingSensitivity * 5), (2 * cornerFactor * cornerFactor * cornerFactor)); } if (corner > 9 && speedFactor > 0.3f) { brake = Mathf.Lerp(0.4f, 1 + (speedFactor * speedFactor) * (brakingSensitivity * 5), (2 * cornerFactor * cornerFactor * cornerFactor)); } if (corner > 12 && speedFactor > 0.3f) { brake = Mathf.Lerp(0.6f, 1 + (speedFactor * speedFactor) * (brakingSensitivity * brakingSensitivity * 5), 1 - (2 * cornerFactor * cornerFactor * cornerFactor)); } if (corner > 15 && speedFactor > 0.3f) { brake = Mathf.Lerp(0.7f, 1 + (speedFactor * speedFactor) * (brakingSensitivity * brakingSensitivity * 5), 1 - (2 * cornerFactor * cornerFactor)); } // tight cornering if (cornerFactor == 1 && speedFactor > 0.1f) { brake = 1f; accel = 0.1f; } float prevTorque = ds.torque; // uphill helper if (speedFactor < 0.3f && ds.rb.gameObject.transform.forward.y > 0.1f) { ds.torque *= 3.0f; accel = 1f; brake = 0f; } // downhill AI if (speedFactor < 0.3f && ds.rb.gameObject.transform.forward.y < -0.35f || target.y < -0.35f) { accel = 0.2f; brake = 0.9f; } if (gameObject.name == "GoldJeep") { Debug.Log(gameObject.name + " corner factor = " + cornerFactor); //Debug.LogWarning("brake " + brake + " SF " + speedFactor * brakingSensitivity); } //Debug.LogWarning(gameObject.name + " brake: " + brake + " accel: " + accel); ds.Go(accel, steer, brake); ds.CheckForSkid(); ds.CalculateEngineSound(); ds.torque = prevTorque; }
void Update() { ProgressTracker(); Vector3 localTarget = ds.rb.gameObject.transform.InverseTransformPoint(target); Vector3 nextLocalTarget = ds.rb.gameObject.transform.InverseTransformPoint(nextTarget); float distanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float nextTargetAngle = Mathf.Atan2(nextLocalTarget.x, nextLocalTarget.z) * Mathf.Rad2Deg; float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(ds.currentSpeed); float distanceFactor = distanceToTarget / totalDistanceToTarget; float speedFactor = ds.currentSpeed / ds.maxSpeed; float accel = Mathf.Lerp(accelSensitivity, 1f, distanceFactor); float brake = Mathf.Lerp((-1 - Mathf.Abs(nextTargetAngle)) * brakingSensitivity, 1 + speedFactor, 1 - distanceFactor); if (Mathf.Abs(nextTargetAngle) > 20) { brake += 0.8f; accel -= 0.8f; } if (isJump) { accel = 1f; brake = 0f; Debug.Log("Jump"); } //if(distanceToTarget < 5) { brake = 1.2f; accel = 0.1f; } Debug.Log("Brake: " + brake + " Accel:" + accel + " Speed: " + ds.rb.velocity.magnitude + " distanceFactor: " + distanceFactor); ds.Go(accel, steer, brake); if (distanceToTarget < 4) //threshold, make larger if car starts to circle waypoint { currentWP++; if (currentWP >= circuit.waypoints.Length) { currentWP = 0; } target = circuit.waypoints[currentWP].transform.position; if (currentWP == circuit.waypoints.Length - 1) { nextTarget = circuit.waypoints[0].transform.position; } else { nextTarget = circuit.waypoints[currentWP + 1].transform.position; } totalDistanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); if (ds.rb.gameObject.transform.InverseTransformPoint(target).y > 5) { isJump = true; } else { isJump = false; } } ds.CheckForSkid(); ds.CalculateEngineSound(); }
void Update() { if (wpReady) { Vector3 localTarget = ds.rb.gameObject.transform.InverseTransformPoint(target); Vector3 nextLocalTarget = ds.rb.gameObject.transform.InverseTransformPoint(nextTarget); float distanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); // Her frame'de target'a olan uzaklık yeniden hesaplanıyor float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; float nextTargetAngle = Mathf.Atan2(nextLocalTarget.x, nextLocalTarget.z) * Mathf.Rad2Deg; // Dönüş gerektiren yerlerde daha çok fren yapmak için kullanıyoruz float steer = Mathf.Clamp(targetAngle * steeringSensitivity, -1, 1) * Mathf.Sign(ds.currentSpeed); float distanceFactor = distanceToTarget / totalDistanceToTarget; // İki waypoint arası mesafeyi aracın sonraki waypointe'e olan uzaklığına bölerek yüzde hesaplıyoruz float speedFactor = ds.currentSpeed / ds.maxSpeed; // hızımıza göre frene basma oranımızı ayarlamak için kullanıyoruz //float accel = 1f; float accel = Mathf.Lerp(accelSensitivity, 1, distanceFactor); // Orjinal kod açıyı kullanıyor ancak ben kullanmadım ayrıca orjinal breakinSesitivity = 1 //float brake = Mathf.Lerp((-1 -Mathf.Abs(nextTargetAngle) * brakingSensitivity) ,1+speedFactor, 1 - distanceFactor); // waypoint'e yaklaştıkça ve viraj açısı arttıkça frene basma ölçüsünü arttırıyoruz float brake = Mathf.Lerp((-1 * brakingSensitivity), 1 + speedFactor, 1 - distanceFactor); // waypoint'e yaklaştıkça ve viraj açısı arttıkça frene basma ölçüsünü arttırıyoruz if (Mathf.Abs(nextTargetAngle) > 20) { brake += 0.8f; accel -= 0.8f; } if (isJump) { accel = 1; brake = 0; Debug.Log("Jump"); } // Debug.Log("Brake: "+ brake+ " Accel: "+ accel + " Speed: "+ ds.rb.velocity.magnitude); //if(distanceToTarget< 5) //{ // brake = 0.8f; // accel = 0.1f; //} ds.Go(accel, steer, brake); if (distanceToTarget < 4) // Threshhol make large if car starts to circle waypoint { currentWP++; if (currentWP >= circuit.waypoints.Length) { currentWP = 0; } target = circuit.waypoints[currentWP].transform.position; if (currentWP == circuit.waypoints.Length - 1) { nextTarget = circuit.waypoints[0].transform.position; } else { nextTarget = circuit.waypoints[currentWP + 1].transform.position; } totalDistanceToTarget = Vector3.Distance(target, ds.rb.gameObject.transform.position); // Sonraki waypoint için yüzde hesaplamak için kullanacağız her waypoint'i geçince yeniden hesaplanıyor if (ds.rb.gameObject.transform.InverseTransformPoint(target).y > 5) { isJump = true; } else { isJump = false; } } ds.CheckForSkid(); ds.CalculateEngineSound(); } }