0
\$\begingroup\$

This is the Text component settings in the Inspector:

Text

The script DialogueManager:

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

public class DialogueManager : MonoBehaviour
{
    public Text dialogueText;
    public float sentencesSwitchDuration;
    public bool animateSentenceChars = false;

    private Queue<string> sentence;

    // Use this for initialization
    void Start ()
    {
        sentence = new Queue<string>();
    }

    public void StartDialogue(Dialogue dialogue)
    {
        Debug.Log("Starting conversation with " + dialogue.name);

        sentence.Clear();
        foreach(string sentence in dialogue.sentences)
        {
            this.sentence.Enqueue(sentence);
        }

        DisplayNextSentence();
    }

    public void DisplayNextSentence()
    {
        if (this.sentence.Count == 0)
        {
            EndDialogue();
            return;
        }

        string sentence = this.sentence.Dequeue();
        dialogueText.text = sentence;

        StopAllCoroutines();
        StartCoroutine(DisplayNextSentenceWithDelay(sentence));
    }

    public IEnumerator DisplayNextSentenceWithDelay(string sentence)
    {
        if (animateSentenceChars)
        {
            dialogueText.text = "";
            foreach (char letter in sentence.ToCharArray())
            {
                dialogueText.text += letter;
                yield return null;
            }
        }

        yield return new WaitForSeconds(sentencesSwitchDuration);
        DisplayNextSentence();
    }

    void EndDialogue()
    {
        Debug.Log("End of conversation.");
    }
}

Then the DialogueTrigger:

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

public class DialogueTrigger : MonoBehaviour
{
    public Dialogue dialogue;

    public void TriggerDialogue()
    {
        FindObjectOfType<DialogueManager>().StartDialogue(dialogue);
    }
}

And last Dialogue:

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

[System.Serializable]
public class Dialogue
{
    public string name;

    [TextArea(3, 10)]
    public string[] sentences;
}

Then in the editor in the Dialogue Trigger in the Inspector I added some text to each of the 3 sentences:

Dialogue trigger sentences

Now when I'm running the game the text is changing between the 3 sentences. But since each sentence have different amount of letters(text content) it display it in a different size:

This is the first sentence when the game is running it seems like to me a good size for the text:

Sentence 1

The second sentence. It seems like to me the text size is too small.

Sentence 2

The last sentence is the same size like sentence 2.

How can I make that the text will be the same size in each sentence ? And how can I make that the lines will start from the same position from the left ?

How in other games they are aligning the text ?

\$\endgroup\$
  • 1
    \$\begingroup\$ Unrelated hint: You probably don't want to have your flying thingy identify itself as 'something something... in the GAME' - it sort of breaks the immersion... unless it's a game about a game that is. \$\endgroup\$ – dot_Sp0T Jul 20 '18 at 20:02
1
\$\begingroup\$

enter image description here

This field, internally, is called resizeTextForBestFit and has the description, "Should the text be allowed to auto resized."

https://docs.unity3d.com/ScriptReference/UI.Text-resizeTextForBestFit.html

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.