private void OnCollisionEnter(Collision collision)
    {
        if (_driver == null)
        {
            return;
        }

        if (_lastHitTime > 0.0f)
        {
            _lastHitTime -= Time.deltaTime;
            return;
        }

        //if ((collision.gameObject.layer & LayerMask.healthNameToLayer("Road")) != 0)
        //{
        //	return;
        //}

        GameObject zombie = collision.gameObject;

        if (!zombie || zombie.layer != LayerMask.NameToLayer("Zombie"))
        {
            return;
        }

        if (zombie && zombie.GetComponent <Health>() && zombie.GetComponent <Health>().health <= 0)
        {
            return;
        }

        BikeLean     bike   = GetComponent <BikeLean>();
        PlayerHealth player = null;

        if (bike)
        {
            player = GetComponentInChildren <PlayerHealth>();
        }
        if (bike && player)
        {
            //zombie damages player
            player.GetHitByZombie(zombie);
        }
        else
        {
            //zombie damages vehicle
            if (health > 0)
            {
                //Debug.Log(gameObject.name + " docking health due to collision with " + collision.gameObject.name);
                health -= 0.5f;
                _vehHealthSlider.value = health;
                _lastHitTime           = 0.5f;
            }
            else
            {
                health = 0.0f;
            }
        }
    }
    private void TryExitVehicle()
    {
        if (_driver == null)
        {
            return;
        }

        _vehicleUIGroup.alpha         = 0.0f;
        _vehicleExitButtonGroup.alpha = 0.0f;
        _vehExitButton.onClick.RemoveAllListeners();
        speed = 0.0f;

        if (engineSource.isPlaying)
        {
            engineSource.Stop();
        }

        BikeLean bike = GetComponent <BikeLean>();

        if (bike)
        {
            bike.enabled           = false;
            vehicleRB.constraints  = RigidbodyConstraints.None;
            vehicleRB.centerOfMass = new Vector3(0, 0.5f, 0);
        }

        GameObject followCamera = gameObject.GetComponent <DisableVehicle>().followCamera;

        gameObject.GetComponent <DisableVehicle>().followCamera = null;
        _driver.GetComponent <DisableVehicle>().followCamera    = followCamera;
        followCamera.GetComponent <FollowCamera>().target       = _driver;

        Vector3 playerReposition = new Vector3(
            ((transform.localPosition.x - 5) + (transform.localScale.x)),
            ((transform.localPosition.y + 2) + (transform.localScale.y)),
            ((transform.localPosition.z) + (transform.localScale.z)));

        _driver.GetComponent <OccupyVehicle>().ExitVehicle(this, playerReposition);

        GameObject[] zombies = zombiesOnRoof.ToArray();        //copy because zombies will be removed while looping
        foreach (GameObject zombie in zombies)
        {
            zombie.GetComponent <ClimbOnVehicle>().DetachFromVehicle();
            zombie.GetComponent <Rigidbody>().AddForce((transform.forward + Vector3.up * 0.5f).normalized * 500 * (speed / maxSpeed), ForceMode.Acceleration);
        }

        Camera.main.GetComponent <TransparentifyObject>().player = _driver.transform;

        _driver = null;

        timeNotMoving = 0.0f;
    }
    protected virtual void EnterVehicle(BaseVehicleClass vehicle)
    {
        Transform driverTransform = vehicle.transform.Find("DriverTransform");

        if (driverTransform == null)
        {
            gameObject.transform.Translate(0, 100, 0);
        }
        else
        {
            //place player on bike
            BikeLean bike = vehicle.GetComponent <BikeLean>();
            bike.enabled = true;
            gameObject.transform.parent        = driverTransform;
            gameObject.transform.localPosition = Vector3.zero;
            gameObject.transform.localRotation = Quaternion.identity;
        }
        GetComponent <Collider>().enabled = false;
        Rigidbody rb = GetComponent <Rigidbody>();

        rb.useGravity  = false;
        rb.constraints = RigidbodyConstraints.FreezeAll;
        gameObject.GetComponentInChildren <ZombieDetector>().enabled = false;        // disable players zombie detector to prevent player using weapons while in vehicle
    }