I’m working on some basic codes for cars in the game, when there’s only one car it works fine, but the moment I add another everything gets weird. I can get in the first car and get out fine , but when I get out of the second car I appear next to the first car. And when I get into the second car first and get out I’m sent to the edge of the map, where I precede to fall off the map.
I’ve been working on with this for a good while, but I’m utterly lost on this one. The scripts auto-disable themselves whenever I’m out of the vehicles, and I use a static external script to store character data like which car I get in, the position of it, etc.
Relevant code:
basiccar.cs (car script)
using UnityEngine;
using System.Collections;
public class basiccar : MonoBehaviour {
public float maxspeed;
public float maxturnnorm;
public float maxturnbrake;
public float acceleration;
public float turning;
public float brake;
public float mass;
public float g;
public GameObject cam;
public Vector3 carpos;
public WheelCollider backleft;
public WheelCollider backright;
public WheelCollider frontleft;
public WheelCollider frontright;
public static bool _active;
public static bool _moving;
public static bool _braking;
public static bool _grounded;
public static bool _idle;
public static bool _occupied;
public static float _speed;
public static float _airspeed;
public static float _airturn;
public static float _turn;
public static float _disground;
public static float _maxturn;
public static float _maxspeed;
void Start () {
_maxturn = maxturnnorm;
_maxspeed = maxspeed;
_occupied = false;
_moving = false;
_braking = false;
_grounded = true;
_idle = true;
_speed = 0.0f;
_airspeed = 0.0f;
_airturn = 0.0f;
_disground = collider.bounds.extents.y;
transform.rigidbody.mass = mass;
wait(2);
this.enabled = false;
}
void Update () {
//Debug.Log(Input.GetAxis("Vertical")+" & "+_speed + " & " + _turn);
transform.rigidbody.AddForce(-Vector3.up * g);
_grounded = isgrounded();
if(_active && _globalvars._curcar == transform.gameObject) {
carpos = _globalvars._curcar.transform.position;
if(Input.GetAxis("Vertical") > 0.01f) {
_speed += acceleration/50f;
}else if(Input.GetAxis("Vertical") < -0.01f) {
_speed -= acceleration/25f;
}else if(Input.GetAxis("Vertical") > -0.01f && Input.GetAxis("Vertical") < 0.01f){
if(_speed > 0.8f) {
_speed -= acceleration/25;
}else if(_speed < -0.8f) {
_speed += acceleration/25;
}else{
_speed = 0.0f;
}
}else{
Debug.Log("Error with user input.");
_speed = 0.0f;
}
if(Input.GetAxis("Horizontal") > 0.01f) {
_turn += turning/25f;
}else if(Input.GetAxis("Horizontal") < -0.01f) {
_turn += turning/25f;
}else if(Input.GetAxis("Horizontal") > -0.01 && Input.GetAxis("Horizontal") < 0.01){
if(_turn > 0.8f) {
_turn -= turning/25f;
}else if(_turn < -0.8f) {
_turn += -turning/25f;
}else{
_turn = 0.0f;
}
}else{
Debug.Log("Error with user input.");
_turn = 0.0f;
}
if(Input.GetButton("Sprint") && _grounded) {
_maxturn = maxturnbrake;
if(_speed > 2.0f) {
_speed -= brake/50;
}else if(_speed < -2.0f) {
_speed += brake/50;
}else{
_speed = 0.0f;
_maxturn = maxturnnorm;
}
}else{
_maxturn = maxturnnorm;
}
if(_speed > _maxspeed) {
_speed = _maxspeed;
}
if(_turn < -_maxturn) {
_turn = -_maxturn;
}else if(_turn > _maxturn) {
_turn = _maxturn;
}
if(_grounded) {
_airspeed = _speed;
_airturn = _turn;
}else{
_speed = _airspeed;
_turn = _airturn;
}
float x = Time.deltaTime * _speed;
float r = Input.GetAxis("Horizontal") * Time.deltaTime * _turn;
transform.Translate(x,0,0);
transform.Rotate(0,r,0);
}
}
public void activate(bool a, GameObject player, GameObject c) {
Debug.Log(_globalvars._curcar);
Debug.Log(player);
_active = a;
cam.active = a;
if(c != null) {
_globalvars.setDriving(a, c, c.transform.position);
}else{
_globalvars.setDriving(a, null, carpos);
}
Vector3 pos = _globalvars._curcarpos;
player.transform.position = new Vector3(pos.x, pos.y, pos.z + 4);
player.active = !a;
if(a == false) {
wait(2);
this.enabled = a;
}
}
public bool isgrounded() {
return Physics.Raycast(transform.position, -Vector3.up, _disground + 1);
}
IEnumerator wait(int time) {
yield return new WaitForSeconds(time);
}
}
custom_Keys.cs (custom keys for player)
using UnityEngine;
using System.Collections;
public class custom_Keys : MonoBehaviour {
private basiccar car = new basiccar();
private raycasting rays = new raycasting();
void Start () {
}
void Update () {
if(Input.GetButton("Pause")) {
Application.Quit();
}
if(Input.GetButtonUp("Use")) {
if(rays.getTag(2f, transform) == "Car") {
var cucar = rays.returnlast();
car = cucar.GetComponent<basiccar>();
car.enabled = true;
car.activate(true, transform.gameObject, cucar);
}else{
Debug.Log("Nothing found");
}
}
}
}
keys_vehicle.cs (set keybindings while in vehicle)
using UnityEngine;
using System.Collections;
public class keys_vehicle : MonoBehaviour {
private basiccar car;
public GameObject player;
void Start () {
car = transform.GetComponent<basiccar>();
}
void Update () {
if(basiccar._active) {
if(Input.GetButtonDown("Use")) {
car.activate(false, player, null);
}
}else if(!basiccar._active) {
}else{
}
}
}
_globalvars.cs (character settings and variables)
using UnityEngine;
using System.Collections;
public class _globalvars : MonoBehaviour {
//Basics
public static float _health;
//Weapons
public static int _ammo_pistol;
public static int _ammo_assault;
public static int _ammo_sniper;
public static int _ammo_grenade;
public static int _ammo_rockets;
//Vehicles
public static bool _isdriving;
public static bool _isflying;
public static GameObject _curcar;
public static Vector3 _curcarpos;
public static GameObject _curplane;
public static Vector3 _curplanepos;
void Start() {
//Basics
_health = 100f;
//Weapons
_ammo_pistol = 0;
_ammo_assault = 0;
_ammo_sniper = 0;
_ammo_grenade = 0;
_ammo_rockets = 0;
//Driving
_isdriving = false;
_isflying = false;
_curcar = null;
_curplane = null;
}
public static void setDriving(bool a, GameObject b, Vector3 c) {
_isdriving = a;
_curcar = b;
_curcarpos = c;
}
public static void setFlying(bool a, GameObject b, Vector3 c) {
_isflying = a;
_curplane = b;
_curplanepos = c;
}
}
If someone can help me that’d be amazing.