I'm creating visual novel right now and have been troubleshooting trying to find a way to make the dialogue display in a way that it adds to a paragraph with each advancement of dialogue, rather than displaying as a new line.
Here is what it looks like now with my conversation's dialogue displaying as a new line, one at a time:
Here is what I am trying to get it to look like with each advancement of dialogue:
I was only able to do this manually changing the dialogue printed in the Subtitle Text, but I'm wondering if there's a way to automate it so it displays like this. Any help is appreciated, and thanks in advanced.
Make dialogue add onto paragraph, rather than adding another line.
Re: Make dialogue add onto paragraph, rather than adding another line.
Hi,
Make a subclass of StandardUISubtitlePanel and use the subclass in place of your dialogue UI's regular StandardUISubtitlePanel component. Override SetSubtitleTextContent to add a space between the old text and new text instead of a newline. Here's a script that does that:
ParagraphSubtitlePanel .cs
I just copied the original SetSubtitleTextContent method's code and changed the line that adds the newline into one that adds a space.
Make a subclass of StandardUISubtitlePanel and use the subclass in place of your dialogue UI's regular StandardUISubtitlePanel component. Override SetSubtitleTextContent to add a space between the old text and new text instead of a newline. Here's a script that does that:
ParagraphSubtitlePanel .cs
Code: Select all
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace PixelCrushers.DialogueSystem
{
public class ParagraphSubtitlePanel : StandardUISubtitlePanel
{
protected override void SetSubtitleTextContent(Subtitle subtitle)
{
TypewriterUtility.StopTyping(subtitleText);
var previousText = accumulateText ? accumulatedText : string.Empty;
if (accumulateText && !string.IsNullOrEmpty(subtitle.formattedText.text))
{
if (numAccumulatedLines < maxLines)
{
numAccumulatedLines++;
}
else
{
// If we're at the max number of lines, remove the first line from the accumulated text:
previousText = previousText.Substring(previousText.IndexOf("\n") + 1);
}
}
var previousChars = accumulateText ? UITools.StripRPGMakerCodes(Tools.StripTextMeshProTags(Tools.StripRichTextCodes(previousText))).Length : 0;
SetFormattedText(subtitleText, previousText, subtitle.formattedText);
if (accumulateText) accumulatedText = subtitleText.text + " "; // <<< CHANGED THIS LINE
if (scrollbarEnabler != null && !HasTypewriter())
{
scrollbarEnabler.CheckScrollbarWithResetValue(0);
}
else if (delayTypewriterUntilOpen && !hasFocus)
{
DialogueManager.instance.StartCoroutine(StartTypingWhenFocused(subtitleText, subtitleText.text, previousChars));
}
else
{
TypewriterUtility.StartTyping(subtitleText, subtitleText.text, previousChars);
}
}
}
}
Re: Make dialogue add onto paragraph, rather than adding another line.
Hey, thanks for the quick response. The code you gave me works, but curiously I cannot set the max limit for accumlated text anymore, despite it being enabled. I want to make it so that when the paragraph hits the max number of lines, the text clears, and begins printing from the next line of dialogue.
Re: Make dialogue add onto paragraph, rather than adding another line.
Hi,
You'll need to modify the script to do that. Currently the "max lines" logic works by newlines, but the script above adds spaces instead of newlines.
For example, in addition to maintaining numAccumulatedLines, you could keep a List<string> of the lines that you've added to the paragraph. When you reach numAccumulatedLines, you could delete the first list element's text from the beginning of the subtitle panel's accumulatedText and delete the element from the list.
You'll need to modify the script to do that. Currently the "max lines" logic works by newlines, but the script above adds spaces instead of newlines.
For example, in addition to maintaining numAccumulatedLines, you could keep a List<string> of the lines that you've added to the paragraph. When you reach numAccumulatedLines, you could delete the first list element's text from the beginning of the subtitle panel's accumulatedText and delete the element from the list.