I’m using a method to run an if statement after each line of text has been read by the user. Pressing Tab will change the line of text to the next:
public void NextText(string nextLine) {
if (Input.GetKeyDown (KeyCode.Tab))
{
text.text = nextLine;
}
I’m calling it in another method:
void Update () {
NextText("Line 1");
NextText("Line 2");
}
Unfortunately, though, if I were to run the script and press Tab for the first time, it will play Line 2 instead of Line 1.
I’m about as beginner as it gets but learning. I appreciate your patience.
This is what your script is doing right now: every single frame, Unity calls the function Update(). This means that in each frame, it first calls NextText("Line 1"), then NextText("Line 2"). If you have just pressed tab during this frame, it first changes the text to “Line 1”, and then immediately changes it to “Line 2” in the same frame.
I think you could do this
int currentMessage = 0;
void Update() {
if (currentMessage == 0)
NextText("Line 1");
else if (currentMessage == 1)
NextText("Line 2");
}
public void NextText(string nextLine) {
if (Input.GetKeyDown(KeyCode.Tab))
{
text.text = nextLine; // set text to current message
currentMessage++; // add 1 to currentMessage
}
}
Or better yet, use an array (and you can change each item in the inspector)
// initialize an array with two items
public string[] messages = new string[] {
"Line 1",
"Line 2"
};
public int currentMessage = 0; // the index in the array
void Update() {
// if index is out of range, do not try
// to get messages[currentMessage] since it doesn't exist
if (currentMessage < messages.Length)
NextText(messages[currentMessage]);
}
public void NextText(string nextLine) {
if (Input.GetKeyDown(KeyCode.Tab))
{
text.text = nextLine; // set text to current message
currentMessage++; // add 1 to currentMessage
}
}
You’re a genius, and I greatly appreciate your input.