85 lines
1.8 KiB
C#
85 lines
1.8 KiB
C#
//----------------------------------------------
|
|
// Realistic Car Controller
|
|
//
|
|
// Copyright © 2014 - 2023 BoneCracker Games
|
|
// https://www.bonecrackergames.com
|
|
// Buğra Özdoğanlar
|
|
//
|
|
//----------------------------------------------
|
|
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
/// <summary>
|
|
/// It must be attached to external camera. This external camera will be used as mirror.
|
|
/// </summary>
|
|
[AddComponentMenu("BoneCracker Games/Realistic Car Controller/Misc/RCC Mirror")]
|
|
public class RCC_Mirror : MonoBehaviour {
|
|
|
|
private Camera cam; // Getting camera component.
|
|
private RCC_CarControllerV3 carController; // Getting car controller.
|
|
|
|
private void Awake() {
|
|
|
|
// Getting camera.
|
|
cam = GetComponent<Camera>();
|
|
|
|
// If no camera found, return.
|
|
if (!cam)
|
|
enabled = false;
|
|
|
|
// Inverting the camera for mirror effect.
|
|
InvertCamera();
|
|
|
|
}
|
|
|
|
private void OnEnable() {
|
|
|
|
StartCoroutine(FixDepth());
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fixing depth of the camera.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private IEnumerator FixDepth() {
|
|
|
|
yield return new WaitForEndOfFrame();
|
|
cam.depth = 1f;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Inverting the camera for mirror effect.
|
|
/// </summary>
|
|
private void InvertCamera() {
|
|
|
|
cam.ResetWorldToCameraMatrix();
|
|
cam.ResetProjectionMatrix();
|
|
cam.projectionMatrix *= Matrix4x4.Scale(new Vector3(-1, 1, 1));
|
|
carController = GetComponentInParent<RCC_CarControllerV3>();
|
|
|
|
}
|
|
|
|
private void OnPreRender() {
|
|
|
|
GL.invertCulling = true;
|
|
|
|
}
|
|
|
|
private void OnPostRender() {
|
|
|
|
GL.invertCulling = false;
|
|
|
|
}
|
|
|
|
private void Update() {
|
|
|
|
// Enable or disable with controllable state of the vehicle.
|
|
cam.enabled = carController.canControl;
|
|
|
|
}
|
|
|
|
}
|