- Home /
Having problems when using triggers
Hello all, am having a problem when I want use the OnTriggerEnter method. So basically I have a list of information(questions) and I want to get a random question every time when the player enters the trigger, but I get spammed all the questions really fast instead. I didn't manage to solve this problem so here is my code. I will be really thankful if somebody helps me.
public int width = 800;
public int height= 300;
public bool showWindow = false;
public bool gameOver = false;
public System.Collections.Generic.List <question> questions;
[Space(10)]
private playerController pc;
//private string countryName;
//private int score = 0;
private int randomNumber;
void Start () {
pc = GetComponent<playerController> ();
}
void OnGUI () {
/*if (Input.GetAxis ("Q") > 0) {
randomNumber = Random.Range (0, questions.Count);
showWindow = true;
}*/
if (showWindow) {
randomNumber = Random.Range (0, questions.Count);
GUI.Window (0, new Rect (Screen.width / 2 - width/2, Screen.height / 2 - height/2, width, height), WindowFunction, questions [randomNumber].questionName);
Screen.lockCursor = false;
pc.lockScreen = true;
}
}
private void OnTriggerEnter (Collider collider) {
//this.countryName = collider.gameObject.name;
if (collider.gameObject.name == "Trigger") {
showWindow = true;
}
}
private void OnTriggerExit (Collider collider) {
if (collider.gameObject.name == "Trigger") {
showWindow = false;
pc.lockScreen = false;
Screen.lockCursor = true;
}
}
private void rightAnswer () {
int rnd = Random.Range (1, 50);
int a = 0;
switch (questions[randomNumber].difficulty) {
case 1: a += 100 + rnd;
break;
case 2: a += 300 + rnd;
break;
case 3: a += 700 + rnd;
break;
}
pc.score += a;
showWindow = false;
pc.lockScreen = false;
Screen.lockCursor = true;
}
private void wrongAnswer () {
if (pc.lives > 0) {
pc.lives -= 1;
showWindow = false;
pc.lockScreen = false;
Screen.lockCursor = true;
}
if (pc.lives <= 0) {
Application.LoadLevel ("Game over");
gameOver = true;
}
}
private void WindowFunction (int windowID) {
if (GUI.Button (new Rect (50, 20, 600, 30), "A) " + questions [randomNumber].answerA)) {
if (questions [randomNumber].answerRight == 1) {
rightAnswer ();
} else {
wrongAnswer ();
}
}
if (GUI.Button (new Rect (50, 55, 600, 30), "B) " + questions [randomNumber].answerB)) {
if (questions [randomNumber].answerRight == 2) {
rightAnswer ();
} else {
wrongAnswer ();
}
}
if (GUI.Button (new Rect (50, 90, 600, 30), "C) " + questions [randomNumber].answerC)) {
if (questions [randomNumber].answerRight == 3) {
rightAnswer ();
} else {
wrongAnswer ();
}
}
if (GUI.Button (new Rect (50, 260, 600, 30), "Exit)) {
showWindow = false;
pc.lockScreen = false;
Screen.lockCursor = true;
}
}
Answer by GameVortex · Dec 11, 2014 at 08:27 AM
You are generating your randomNumber in the OnGUI function. OnGUI is called by Unity multiple times each frame. This will generate a new random number every time and you get the effect you see, all the questions cycled through fast.
A quick fix can be to move the generation of the randomNumber to the OnTriggerEnter function, then the number will only be generated when the player enters the trigger.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
MouseOver Doesn't work ON trigger 3 Answers
unknown identifer explosion problem 2 Answers
Renaming a GameObject Clone 1 Answer
Where is the problem? 0 Answers