Racing_Game/Assets/RealisticCarControllerV3/Scripts/RCC_CharacterController.cs

112 lines
3.4 KiB
C#

//----------------------------------------------
// Realistic Car Controller
//
// Copyright © 2014 - 2023 BoneCracker Games
// https://www.bonecrackergames.com
// Buğra Özdoğanlar
//
//----------------------------------------------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Animates Driver Sofie (Credits to 3DMaesen). Simply feeds floats and bools of Sofie's animator component.
/// </summary>
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/Misc/RCC Animator Controller")]
public class RCC_CharacterController : MonoBehaviour {
// Car controller.
public RCC_CarControllerV3 CarController {
get {
if (_carController == null)
_carController = GetComponentInParent<RCC_CarControllerV3>();
return _carController;
}
}
private RCC_CarControllerV3 _carController;
// Animator.
public Animator animator;
// String parameters of animator.
public string driverSteeringParameter;
public string driverShiftingGearParameter;
public string driverDangerParameter;
public string driverReversingParameter;
// Inputs for feeding animator.
public float steerInput = 0f;
public float directionInput = 0f;
public bool reversing = false;
public float impactInput = 0f;
public float gearInput = 0f;
private void Update() {
// Getting steer input.
steerInput = Mathf.Lerp(steerInput, CarController.steerInput, Time.deltaTime * 5f);
directionInput = CarController.transform.InverseTransformDirection(CarController.Rigid.velocity).z;
impactInput -= Time.deltaTime * 5f;
// Clamping impact input.
if (impactInput < 0)
impactInput = 0f;
if (impactInput > 1)
impactInput = 1f;
// If vehicle is going backwards or not.
if (directionInput <= -2f)
reversing = true;
else if (directionInput > -1f)
reversing = false;
// If changing gear.
if (CarController.changingGear)
gearInput = 1f;
else
gearInput -= Time.deltaTime * 5f;
// Clamping gear input.
if (gearInput < 0)
gearInput = 0f;
if (gearInput > 1)
gearInput = 1f;
// If reversing.
if (!reversing)
animator.SetBool(driverReversingParameter, false);
else
animator.SetBool(driverReversingParameter, true);
// If impact is high enough, animate collision animation by setting bool.
if (impactInput > .5f)
animator.SetBool(driverDangerParameter, true);
else
animator.SetBool(driverDangerParameter, false);
// If changing gear, animate change gear animation by setting bool.
if (gearInput > .5f)
animator.SetBool(driverShiftingGearParameter, true);
else
animator.SetBool(driverShiftingGearParameter, false);
// Setting steer input of the animator by setting float.
animator.SetFloat(driverSteeringParameter, steerInput);
}
private void OnCollisionEnter(Collision col) {
// If collision is not high enough, return.
if (col.relativeVelocity.magnitude < 2.5f)
return;
// Setting impact to 1 on collisions.
impactInput = 1f;
}
}