68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
//----------------------------------------------
|
|
// Realistic Car Controller
|
|
//
|
|
// Copyright © 2014 - 2023 BoneCracker Games
|
|
// https://www.bonecrackergames.com
|
|
// Buğra Özdoğanlar
|
|
//
|
|
//----------------------------------------------
|
|
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// Rotates the brake caliper.
|
|
/// </summary>
|
|
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/Misc/RCC Visual Brake Caliper")]
|
|
public class RCC_Caliper : MonoBehaviour {
|
|
|
|
public RCC_WheelCollider wheelCollider; // Actual WheelCollider.
|
|
private GameObject newPivot; // Creating new center pivot for correct position.
|
|
private Quaternion defLocalRotation; // Default local rotation.
|
|
|
|
private void Awake() {
|
|
|
|
// No need to go further if no wheelcollider found.
|
|
if (!wheelCollider) {
|
|
|
|
Debug.LogError("WheelCollider is not selected for this caliper named " + transform.name);
|
|
enabled = false;
|
|
return;
|
|
|
|
}
|
|
|
|
// Creating new center pivot for correct position.
|
|
newPivot = new GameObject("Pivot_" + transform.name);
|
|
newPivot.transform.SetParent(wheelCollider.WheelCollider.transform, false);
|
|
transform.SetParent(newPivot.transform, true);
|
|
|
|
// Assigning default rotation.
|
|
defLocalRotation = newPivot.transform.localRotation;
|
|
|
|
}
|
|
|
|
private void LateUpdate() {
|
|
|
|
// No need to go further if no wheelcollider or no wheelmodel found.
|
|
if (!wheelCollider.wheelModel || !wheelCollider.WheelCollider)
|
|
return;
|
|
|
|
// Left or right side?
|
|
int side = 1;
|
|
|
|
// If left side...
|
|
if (wheelCollider.transform.localPosition.x < 0)
|
|
side = -1;
|
|
|
|
// Re-positioning camber pivot.
|
|
newPivot.transform.position = wheelCollider.wheelPosition;
|
|
newPivot.transform.localPosition += Vector3.up * wheelCollider.WheelCollider.suspensionDistance / 2f;
|
|
|
|
// Re-rotationing camber pivot.
|
|
newPivot.transform.localRotation = defLocalRotation * Quaternion.Euler(wheelCollider.caster * side, wheelCollider.WheelCollider.steerAngle, wheelCollider.camber * side);
|
|
|
|
}
|
|
|
|
}
|