- Home /
About "How do I make laps in a racing game?"
I am working on a racing game and I used the player and checkpoint scripts provided in the answer "save" made, but now I want to see the checkpoint counter on my GUI going up everytime I go through a checkpoint and what I managed to code created a CP and Lap counter on a GUI label, but it won't go up as I pass through the checkpoints.
The Player code is this
var checkPointArray : Transform[]; //Checkpoint GameObjects stored as an array
private static public var currentCheckpoint : int = 0; //Current checkpoint
private static public var currentLap : int = 0; //Current lap
private static public var startPos : Vector3; //Starting position
private var moveMultiplier : int = 8; //Multiplies the Input.GetAxis movement of our player
function Start () {
//Set a simple visual aid for the Checkpoints
for (objAlpha in checkPointArray) {
objAlpha.renderer.material.color.a = 0.2;
}
checkPointArray[0].renderer.material.color.a = 0.8;
//Store the starting position of the player
startPos = transform.position;
}
function FixedUpdate () {
//Movement for the player (Standard Input: Arrow Keys/W,A,S,D)
rigidbody.AddForce(Input.GetAxis("Horizontal")*moveMultiplier, 0, Input.GetAxis("Vertical")*moveMultiplier);
}
The checkpoint code (slightly modified in the end) is this
static var playerTransform : Transform; //Store the player transform
function Start () {
playerTransform = gameObject.Find("Sphere (Player)").transform; //Set the player transform
}
function OnTriggerEnter (other : Collider) {
//Is it the Player who enters the collider?
if (!other.CompareTag("Player"))
return; //If it's not the player dont continue
//Is this transform equal to the transform of checkpointArrays[currentCheckpoint]?
if (transform==playerTransform.GetComponent(Player).checkPointArray[Player.currentCheckpoint].transform) {
//Check so we dont exceed our checkpoint quantity
if (Player.currentCheckpoint+1<playerTransform.GetComponent(Player).checkPointArray.length) {
//Add to currentLap if currentCheckpoint is 0
if(Player.currentCheckpoint==0)
Player.currentLap++;
Player.currentCheckpoint++;
} else {
//If we dont have any Checkpoints left, go back to 0
Player.currentCheckpoint=0;
}
visualAid(); //Run a coroutine to update the visual aid of our Checkpoints
//Update the 3dtext
Camera.main.GetComponent("CPLap").text = "Checkpoint: "+(Player.currentCheckpoint)+" Lap: "+(Player.currentLap);
}
}
function visualAid () {
//Set a simple visual aid for the Checkpoints
for (objAlpha in playerTransform.GetComponent(Player).checkPointArray) {
objAlpha.renderer.material.color.a = 0.2;
}
playerTransform.GetComponent(Player).checkPointArray[Player.currentCheckpoint].renderer.material.color.a = 0.8;
}
The only change I made was on the CP 26th code line, to try and get it to find the GUI.label working as the counter, but it fails to work.
Here is the CPLap script I made:
#pragma strict
function OnGUI () {
GUI.Label (Rect (10, 10, 100, 400), "Checkpoint: 0 Lap: 0");
}
Sadly, it's not working and I have to deliver the project on Friday and I can't finish this part, and I cannot buy a racing script pack like those professional ones. The project is for the course I'm taking.
I thank in advance whoever helps me with this, as all the people I know who code are unavailable and my programing mentor is busy all week, making this very urgent.
Answer by lyzard · Jul 10, 2012 at 11:20 AM
wait, if you do
GUI.Label (Rect (10, 10, 100, 400), "Checkpoint: 0 Lap: 0");
then it should be obvious that the lap does not change, try something like:
GUI.Label (Rect (10, 10, 100, 400), "Checkpoint: "+ Player.currentCheckpoint+" Lap: "+Player.currentLap);
It didn't work, but don't worry I talked to a programmer and he solved it with me thanks to the debug mode.
Your answer
Follow this Question
Related Questions
Ranking System in Racing Game 1 Answer
How to set high score (best time) with playerprefs 1 Answer
Star graphic after finishing a level 0 Answers
Unity Main Menu 1 Answer