Первый коммит
This commit is contained in:
@ -0,0 +1,184 @@
|
||||
//----------------------------------------------
|
||||
// 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;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
/// <summary>
|
||||
/// A simple example manager for how the car selection scene works.
|
||||
/// </summary>
|
||||
public class RCC_CarSelectionExample : MonoBehaviour {
|
||||
|
||||
private List<RCC_CarControllerV3> _spawnedVehicles = new List<RCC_CarControllerV3>(); // Our spawned vehicle list. No need to instantiate same vehicles over and over again.
|
||||
|
||||
public Transform spawnPosition; // Spawn transform.
|
||||
public int selectedIndex = 0; // Selected vehicle index. Next and previous buttons are affecting this value.
|
||||
|
||||
public RCC_Camera RCCCamera; // Enabling / disabling camera selection script on RCC Camera if choosen.
|
||||
public string nextScene; // Name of the target scene when we select the vehicle.
|
||||
|
||||
private void Start() {
|
||||
|
||||
// Getting RCC Camera.
|
||||
if (!RCCCamera)
|
||||
RCCCamera = RCC_SceneManager.Instance.activePlayerCamera;
|
||||
|
||||
// First, we are instantiating all vehicles and store them in _spawnedVehicles list.
|
||||
CreateVehicles();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creating all vehicles at once.
|
||||
/// </summary>
|
||||
private void CreateVehicles() {
|
||||
|
||||
for (int i = 0; i < RCC_DemoVehicles.Instance.vehicles.Length; i++) {
|
||||
|
||||
// Spawning the vehicle with no controllable, no player, and engine off. We don't want to let player control the vehicle while in selection menu.
|
||||
RCC_CarControllerV3 spawnedVehicle = RCC.SpawnRCC(RCC_DemoVehicles.Instance.vehicles[i], spawnPosition.position, spawnPosition.rotation, false, false, false);
|
||||
|
||||
// Disabling spawned vehicle.
|
||||
spawnedVehicle.gameObject.SetActive(false);
|
||||
|
||||
// Adding and storing it in _spawnedVehicles list.
|
||||
_spawnedVehicles.Add(spawnedVehicle);
|
||||
|
||||
}
|
||||
|
||||
SpawnVehicle();
|
||||
|
||||
// If RCC Camera is choosen, it wil enable RCC_CameraCarSelection script. This script was used for orbiting camera.
|
||||
if (RCCCamera) {
|
||||
|
||||
if (RCCCamera.GetComponent<RCC_CameraCarSelection>())
|
||||
RCCCamera.GetComponent<RCC_CameraCarSelection>().enabled = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increasing selected index, disabling all other vehicles, enabling current selected vehicle.
|
||||
/// </summary>
|
||||
public void NextVehicle() {
|
||||
|
||||
selectedIndex++;
|
||||
|
||||
// If index exceeds maximum, return to 0.
|
||||
if (selectedIndex > _spawnedVehicles.Count - 1)
|
||||
selectedIndex = 0;
|
||||
|
||||
SpawnVehicle();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decreasing selected index, disabling all other vehicles, enabling current selected vehicle.
|
||||
/// </summary>
|
||||
public void PreviousVehicle() {
|
||||
|
||||
selectedIndex--;
|
||||
|
||||
// If index is below 0, return to maximum.
|
||||
if (selectedIndex < 0)
|
||||
selectedIndex = _spawnedVehicles.Count - 1;
|
||||
|
||||
SpawnVehicle();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Spawns the current selected vehicle.
|
||||
/// </summary>
|
||||
public void SpawnVehicle() {
|
||||
|
||||
// Disabling all vehicles.
|
||||
for (int i = 0; i < _spawnedVehicles.Count; i++)
|
||||
_spawnedVehicles[i].gameObject.SetActive(false);
|
||||
|
||||
// And enabling only selected vehicle.
|
||||
_spawnedVehicles[selectedIndex].gameObject.SetActive(true);
|
||||
|
||||
RCC_SceneManager.Instance.activePlayerVehicle = _spawnedVehicles[selectedIndex];
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registering the spawned vehicle as player vehicle, enabling controllable.
|
||||
/// </summary>
|
||||
public void SelectVehicle() {
|
||||
|
||||
// Registers the vehicle as player vehicle.
|
||||
RCC.RegisterPlayerVehicle(_spawnedVehicles[selectedIndex]);
|
||||
|
||||
// Starts engine and enabling controllable when selected.
|
||||
_spawnedVehicles[selectedIndex].StartEngine();
|
||||
_spawnedVehicles[selectedIndex].SetCanControl(true);
|
||||
|
||||
// Save the selected vehicle for instantianting it on next scene.
|
||||
PlayerPrefs.SetInt("SelectedRCCVehicle", selectedIndex);
|
||||
|
||||
// If RCC Camera is choosen, it will disable RCC_CameraCarSelection script. This script was used for orbiting camera.
|
||||
if (RCCCamera) {
|
||||
|
||||
if (RCCCamera.GetComponent<RCC_CameraCarSelection>())
|
||||
RCCCamera.GetComponent<RCC_CameraCarSelection>().enabled = false;
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(nextScene))
|
||||
OpenScene();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deactivates selected vehicle and returns to the car selection.
|
||||
/// </summary>
|
||||
public void DeSelectVehicle() {
|
||||
|
||||
// De-registers the vehicle.
|
||||
RCC.DeRegisterPlayerVehicle();
|
||||
|
||||
// Resets position and rotation.
|
||||
_spawnedVehicles[selectedIndex].transform.position = spawnPosition.position;
|
||||
_spawnedVehicles[selectedIndex].transform.rotation = spawnPosition.rotation;
|
||||
|
||||
// Kills engine and disables controllable.
|
||||
_spawnedVehicles[selectedIndex].KillEngine();
|
||||
_spawnedVehicles[selectedIndex].SetCanControl(false);
|
||||
|
||||
// Resets the velocity of the vehicle.
|
||||
_spawnedVehicles[selectedIndex].GetComponent<Rigidbody>().ResetInertiaTensor();
|
||||
_spawnedVehicles[selectedIndex].GetComponent<Rigidbody>().velocity = Vector3.zero;
|
||||
_spawnedVehicles[selectedIndex].GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
|
||||
|
||||
// If RCC Camera is choosen, it wil enable RCC_CameraCarSelection script. This script was used for orbiting camera.
|
||||
if (RCCCamera) {
|
||||
|
||||
if (RCCCamera.GetComponent<RCC_CameraCarSelection>())
|
||||
RCCCamera.GetComponent<RCC_CameraCarSelection>().enabled = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the target scene.
|
||||
/// </summary>
|
||||
public void OpenScene() {
|
||||
|
||||
// Loads next scene.
|
||||
SceneManager.LoadScene(nextScene);
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user