//---------------------------------------------- // 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; /// /// Tracks the player vehicle and keeps orientation nicely for cinematic angles. It has a pivot gameobject named "Animation Pivot". This pivot gameobject has 3 animations itself. /// [AddComponentMenu("BoneCracker Games/Realistic Car Controller/Camera/RCC Cinematic Camera")] public class RCC_CinematicCamera : RCC_Singleton { public GameObject pivot; // Animation Pivot. private Vector3 targetPosition; // Target position for tracking. public float targetFOV = 60f; // Target field of view. private void Start() { // If pivot is not selected in the Inspector Panel, create it. if (!pivot) { pivot = new GameObject("Pivot"); pivot.transform.SetParent(transform); pivot.transform.localPosition = Vector3.zero; pivot.transform.localRotation = Quaternion.identity; } } private void Update() { // If current camera is null, return. if (!RCC_SceneManager.Instance.activePlayerCamera) return; // If current camera is null, return. if (RCC_SceneManager.Instance.activePlayerCamera.cameraTarget == null) return; // If current camera is null, return. if (RCC_SceneManager.Instance.activePlayerCamera.cameraTarget.playerVehicle == null) return; Transform target = RCC_SceneManager.Instance.activePlayerCamera.cameraTarget.playerVehicle.transform; // Rotates smoothly towards to vehicle. transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(transform.eulerAngles.x, target.eulerAngles.y + 180f, transform.eulerAngles.z), Time.deltaTime * 3f); // Calculating target position. targetPosition = target.position; targetPosition -= transform.rotation * Vector3.forward * 10f; // Assigning transform.position to targetPosition. transform.position = targetPosition; } }