How can I make the text go to a new line when it reaches the end of the box?

So I’m using this script that types text automatically letter by letter. The problem is, I’ve set the GUI box to 640 x 480, but the text goes outside of that box instead of going to another line when it’s at the end.

Does anyone know what’s causing that?

using UnityEngine;
using System.Collections;
public class mainText : MonoBehaviour
{
    public float letterPause = 0.05f;
    public AudioClip sound;
    public GUIStyle font;
    string message;
    string text;
  
    void Start ()
    {
        message = "Welcome new warrior! This is a blue screen, you must fight your way out! " +
            "Without any hands or other parts. This may take some time...";
        text = "";
        StartCoroutine(TypeText());
    }
  
    IEnumerator TypeText ()
    {
        foreach (char letter in message.ToCharArray())
        {
            text += letter;
            if (sound)
                audio.PlayOneShot (sound);
            yield return 0;
            yield return new WaitForSeconds (letterPause);
        }
    }
  
    void OnGUI()
    {
        GUI.Box(new Rect(Screen.width / 2 - 320, Screen.height / 2 - 240, 640, 480), text, font);
    }
  
    void Update()
    {
        if(Input.GetKeyDown (KeyCode.Return))
        {
            StopAllCoroutines();
            text = message;
        }
    }
}

One solution is to just insert newlines into your text where you what it to wrap:

message = "Welcome new warrior!

This is a blue screen,
you must fight your way out!
" +
“Without any hands or other
parts. This may take some
time…”;

It can be dynamically wrapped based on the calculation of string sizes if you need it.