Code Dinobot:
The fast bite

...
The car is build in Unity as a prefab. On TheCar itself there are a couple scripts. For the input of the car, a boost manager and some more. Also there are the rigidbody and the box collider for the entire car.

TheCar has 2 child objects. One of them is the body and that contains the model of the car and all camera angles. The other one, Wheels, also has 2 childs. The first one for the colliders, which I will go deeper into in a second. And the last one is for the models of the wheels.
...
Each wheel has 3 components. First we have the transform, which U can decide the position, rotation and scale of the collider of the wheel with.

The second component is the wheel collider. It's a Unity component which u can put on your wheel and can tweek a lot. This is one of the most time comsuming thing about the car, because it has so many settings. One setting can change to car from having oversteer all the time to having understeer all the time.

And last but not least, the Wheel script. By turning on/off the checkmarks u can decide if you want that wheel to be able to turn and if it can give power. That way u can decide if the car has front or rear wheel drive.
Results:

InRadius System

                            
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InRadius : MonoBehaviour
{
    private MedKit medKit;
    private Shield shield;
    private KeycardPink keycardPink;
    private KeycardRed keycardRed;
    private KeycardGreen keycardGreen;
    private Gun gun;
    private UsbStick usbStick;
    private Inventory inventory;
    private UpgradesManager upgradesManager;
    private PlayerHealth playerHealth;

    private void Start()
    {
        medKit = FindObjectOfType<MedKit>();
        shield = FindObjectOfType<Shield>();
        keycardPink = FindObjectOfType<KeycardPink>();
        keycardRed = FindObjectOfType<KeycardRed>();
        keycardGreen = FindObjectOfType<KeycardGreen>();
        gun = FindObjectOfType<Gun>();
        usbStick = FindObjectOfType<UsbStick>();
        inventory = FindObjectOfType<Inventory>();
        upgradesManager = FindObjectOfType<UpgradesManager>();
        playerHealth = FindObjectOfType<PlayerHealth>();
    }
    private void OnTriggerStay(Collider other)
    {
        if (other.gameObject.CompareTag("Medkit"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(other.GetComponent<MedKit>().Medkit());
            }
        }

        if (other.gameObject.CompareTag("Ammo"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(other.GetComponent<Ammo>().PickUpAmmo());
            }
        }

        if (other.gameObject.CompareTag("Shield"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(other.GetComponent<Shield>().ShieldEquip());
            }
        }

        if (other.gameObject.CompareTag("Gun"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(gun.GunEquip());
            }
        }

        if (other.gameObject.CompareTag("KeycardPink"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(keycardPink.PickUpKeycard());
            }
        }

        if (other.gameObject.CompareTag("KeycardRed"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(keycardRed.PickUpKeycard());
            }
        }

        if (other.gameObject.CompareTag("KeycardGreen"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                StartCoroutine(keycardGreen.PickUpKeycard());
            }
        }

        if (other.gameObject.CompareTag("USB-Stick"))
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                inventory.USBStickAmount += 1;
                if (upgradesManager.healingUSB == true)
                {
                    playerHealth.currentHealth += upgradesManager.healingUSBAmount; 
                }
                usbStick.OpenUSBScreen();

                Destroy(other.gameObject);
            }
        }
    }
}
                            
                        

Upgrade System

                            
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public enum upgradeState
{
    locked, selectable, alreadyBought
}

public class UpgradeNode : MonoBehaviour
{
    [SerializeField] private UpgradeNode[] nextUpgrades;
    [SerializeField] private upgradeState state;
    private UpgradesManager upgradesManager;
    private Inventory inventory;
    [SerializeField] private int upgrades;

    private void Awake()
    {
        upgradesManager = FindObjectOfType<UpgradesManager>();
        inventory = FindObjectOfType<Inventory>();
    }

    public void OnClickEnter()
    {
        if (inventory.USBStickAmount <= 0)
        {
            return;
        }

        upgradesManager.SetState(upgrades, upgradeState.alreadyBought);
        
        foreach (UpgradeNode node in nextUpgrades)
        {
            if (upgradesManager.AllowedToActivate(node.upgrades))
            {
                node.GetComponent<Button>().interactable = true;
            }
        }
        upgradesManager.Upgrades(upgrades);
    }

    public void SetStateToBought()
    {
        if (inventory.USBStickAmount <= 0)
        {
            return;
        }
        inventory.USBStickAmount -= 1;
        Button b = GetComponent<Button>();
        ColorBlock cb = b.colors;

        cb.disabledColor = Color.green;
        b.colors = cb;

        b.interactable = false;
    }
}
                            
                        
                            
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UpgradesManager : MonoBehaviour
{
    public class upgradeData
    {
        public upgradeState state;
        public int upgradeID;
        public List<int> requiredNotes = new List<int>();
        public string type = "regular";
    }

    private PlayerHealth playerHealth;
    private PlayerStats playerStats;
    private EnemyStats enemyStats;
    private Inventory inventory;
    private PlayerMovement playerMovement;
    private BurningDamage burningDamage;
    private Overheating overheating;
    private Immunity immunity;

    private List<upgradeData> upgrades;
    public bool healingUSB;
    public int healingUSBAmount = 25;

    [SerializeField] private List<int> updatesApplied = new List<int>();


    private void Awake()
    {
        playerHealth = FindObjectOfType<PlayerHealth>();
        playerStats = FindObjectOfType<PlayerStats>();
        enemyStats = FindObjectOfType<EnemyStats>();
        inventory = FindObjectOfType<Inventory>();
        playerMovement = FindObjectOfType<PlayerMovement>();
        burningDamage = FindObjectOfType<BurningDamage>();
        overheating = FindObjectOfType<Overheating>();
        immunity = FindObjectOfType<Immunity>();

        upgrades = new List<upgradeData>();
        for (int i = 0; i < 27; i++)
        {
            upgradeData node = new upgradeData()
            {
                state = upgradeState.selectable,
                upgradeID = i
            };
            upgrades.Add(node);
        }

        upgrades[2].requiredNotes.Add(0);

        upgrades[3].requiredNotes.Add(0);
        upgrades[3].requiredNotes.Add(1);

        upgrades[4].requiredNotes.Add(1);

        upgrades[5] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 5,
        };
        upgrades[5].requiredNotes.Add(2);
        upgrades[5].requiredNotes.Add(3);
        upgrades[5].requiredNotes.Add(4);

        upgrades[6] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 6,
        };
        upgrades[6].requiredNotes.Add(5);



        upgrades[7] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 7,
        };

        upgrades[8] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 8,
        };
        upgrades[8].requiredNotes.Add(7);

        upgrades[9] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 9,
        };
        upgrades[9].requiredNotes.Add(7);

        upgrades[10] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 10,
        };
        upgrades[10].requiredNotes.Add(7);

        upgrades[11] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 11,
        };
        upgrades[11].requiredNotes.Add(8);
        upgrades[11].requiredNotes.Add(9);
        upgrades[11].requiredNotes.Add(10);

        upgrades[12] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 12,
        };
        upgrades[12].requiredNotes.Add(11);



        upgrades[13] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 13,
        };

        upgrades[14] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 14,
        };

        upgrades[15] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 15,
        };
        upgrades[15].requiredNotes.Add(13);

        upgrades[16] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 16,
        };
        upgrades[16].requiredNotes.Add(13);
        upgrades[16].requiredNotes.Add(14);

        upgrades[17] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 17,
        };
        upgrades[17].requiredNotes.Add(14);

        upgrades[18] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 18,
        };
        upgrades[18].requiredNotes.Add(15);
        upgrades[18].requiredNotes.Add(16);
        upgrades[18].requiredNotes.Add(17);

        upgrades[19] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 19,
        };
        upgrades[19].requiredNotes.Add(18);



        upgrades[20] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 20,
        };

        upgrades[21] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 21,
        };

        upgrades[22] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 22,
        };
        upgrades[22].requiredNotes.Add(20);

        upgrades[23] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 23,
        };
        upgrades[23].requiredNotes.Add(20);
        upgrades[23].requiredNotes.Add(21);

        upgrades[24] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 24,
        };
        upgrades[24].requiredNotes.Add(21);

        upgrades[25] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 25,
        };
        upgrades[25].requiredNotes.Add(22);
        upgrades[25].requiredNotes.Add(23);
        upgrades[25].requiredNotes.Add(24);

        upgrades[26] = new upgradeData()
        {
            state = upgradeState.selectable,
            upgradeID = 26,
        };
        upgrades[26].requiredNotes.Add(25);
    }

    public void SetState(int id, upgradeState state)
    {
        upgrades.Find(o => o.upgradeID == id).state = state;
    }

    public bool AllowedToActivate(int id)
    {
        upgradeData data = upgrades[id];

        bool answer = true;

        for (int i = 0; i < data.requiredNotes.Count; i++)
        {
            if (upgrades[data.requiredNotes[i]].state == upgradeState.selectable ||
             upgrades[data.requiredNotes[i]].state == upgradeState.locked)
            {
                answer = false;
                break;
            }
        }
        return answer;
    }


    public void Upgrades(int whichUpgrade)
    {
        bool upgrade1;
        bool upgrade2;
        bool upgrade3;
        bool upgrade4;

        if (updatesApplied.Contains(whichUpgrade))
        {
            return;
        }

        updatesApplied.Add(whichUpgrade);

        if (whichUpgrade == 0)
        {
            playerHealth.maxHealth += 10;
        }
        else if (whichUpgrade == 1)
        {
            playerStats.medkitGivingHealth += 10;
        }
        else if (whichUpgrade == 2)
        {
            playerStats.medkitGivingHealth += 20;
        }
        else if (whichUpgrade == 3)
        {
            float plusProcentDamage = playerStats.damageDealingPlayer / 100 * 2;
            playerStats.damageDealingPlayer += plusProcentDamage;
        }
        else if (whichUpgrade == 4)
        {
            overheating.cooldownTime -= 1;
        }
        else if (whichUpgrade == 5)
        {
            healingUSB = true;
        }
        else if (whichUpgrade == 6)
        {
            playerHealth.maxHealth += 50;
            if (enemyStats.killCountEnemy >= 5)
            {
                enemyStats.killCountEnemy = 0;
                playerHealth.currentHealth += 40;
            }
            healingUSBAmount = 50;
        }


        else if (whichUpgrade == 7)
        {
            inventory.canBurnEnemyStageOne = true;
        }
        else if (whichUpgrade == 8)
        {
            overheating.cooldownTime -= 1;
        }
        else if (whichUpgrade == 9)
        {
            inventory.ammoWeaponMax += 3;
        }
        else if (whichUpgrade == 10)
        {
            burningDamage.burningDmg += 1;
        }
        else if (whichUpgrade == 11)
        {
            burningDamage.inBetweenBurningDmgTime = 1;
            inventory.canBurnEnemyStageOne = false;
            inventory.canBurnEnemyStageTwo = true;
        }
        else if (whichUpgrade == 12)
        {
            burningDamage.burningDmg += 6;
        }


        else if (whichUpgrade == 13)
        {
            inventory.ammoWeaponMax += 2;
        }
        else if (whichUpgrade == 14)
        {
            playerHealth.maxShield += 10;
        }
        else if (whichUpgrade == 15)
        {
            overheating.cooldownTime -= 1;
        }
        else if (whichUpgrade == 16)
        {
            playerStats.shieldGivingShield += 20;
        }
        else if (whichUpgrade == 17)
        {
            playerStats.medkitGivingHealth += 20;
        }
        else if (whichUpgrade == 18)
        {
            playerHealth.maxHealth += 30;
            playerHealth.maxShield += 30;
            if (enemyStats.killCountEnemyShieldStageOne >= 15)
            {
                enemyStats.killCountEnemyShieldStageOne = 0;
                playerHealth.currentShield += 55;
                playerHealth.maxShield += 2;
            }
        }
        else if (whichUpgrade == 19)
        {
            float minusProcentDamage = playerStats.damageDealingPlayer / 100 * 10;
            playerStats.damageDealingPlayer -= minusProcentDamage;
            float minusProcentBurningDamage = burningDamage.burningDmg / 100 * 10;
            burningDamage.burningDmg -= minusProcentBurningDamage;
            playerHealth.maxHealth += 350;
            playerHealth.maxShield += 250;
            if (enemyStats.killCountEnemyShieldStageTwo >= 15)
            {
                enemyStats.killCountEnemyShieldStageTwo = 0;
                playerHealth.currentShield += 180;
                playerHealth.maxShield += 10;
            }
        }



        else if (whichUpgrade == 20)
        {
            upgrade1 = true;
            upgrade2 = false;
            upgrade3 = false;
            upgrade4 = false;
            if (playerStats.healthPercentage <= 20 && upgrade1 && 
            !upgrade2 && !upgrade3 && !upgrade4)
            {
                playerMovement.currentMoveSpeed *= 1.2f;
            }
        }
        else if (whichUpgrade == 21)
        {
            immunity.immunityIsUnlocked = true;
        }
        else if (whichUpgrade == 22)
        {
            upgrade1 = false;
            upgrade2 = true;
            upgrade3 = false;
            upgrade4 = false;
            if (playerStats.healthPercentage <= 40 && !upgrade1 && 
            upgrade2 && !upgrade3 && !upgrade4)
            {
                playerMovement.currentMoveSpeed *= 1.2f;
            }
        }
        else if (whichUpgrade == 23)
        {
            float plusProcentSpeed = playerMovement.currentMoveSpeed / 100 * 10;
            playerMovement.currentMoveSpeed += plusProcentSpeed;
        }
        else if (whichUpgrade == 24)
        {
            immunity.immunityTime += 0.5f;
            immunity.cooldownTime -= 5;
        }
        else if (whichUpgrade == 25)
        {
            upgrade1 = false;
            upgrade2 = false;
            upgrade3 = true;
            upgrade4 = false;
            if (playerStats.healthPercentage <= 40 && !upgrade1 && 
            !upgrade2 && upgrade3 && !upgrade4)
            {
                playerMovement.currentMoveSpeed *= 1.6f;
            }
            immunity.immunityTime += 1.5f;
            immunity.cooldownTime -= 5;
        }
        else if (whichUpgrade == 26)
        {
            upgrade1 = false;
            upgrade2 = false;
            upgrade3 = false;
            upgrade4 = true;
            if (playerStats.healthPercentage <= 50 && !upgrade1 && 
            !upgrade2 && !upgrade3 && upgrade4)
            {
                playerMovement.currentMoveSpeed *= 1.8f;
            }
            immunity.immunityTime += 2;
            immunity.cooldownTime -= 5;
        }
    }
}
                            
                        

Go back

Dinobot

or

Home Page