Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by dlstilts · Feb 02 at 01:10 PM · c#uitext

Display fixed number of words in textbox at a time

Hi I have been trying to figure this out with no luck.

I am receiving text from an API and sometimes the text is received with over 10 words and sometimes only one word. I would like to write a script that will only allow up to 3 words to be displayed at a time in a text box on screen.

Then after 2 seconds it will move to the next three words. If there is less than three words it will only display the remaining words. Once it is finished I would like to call the API again to get more text. Can anyone help with this please?

I have been trying to create a lot of if statements but I am not sure how I would get the logic right? I think I might be overcomplicating this. Please help if there is an easier way. Thank you!

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 using UnityEngine.UI;
 using JacobGames.SuperInvoke;
 
 public class TesxtMeshAi : MonoBehaviour
     {
     int count = 0;
         public Text Ai;
         public string AiMesh;
     string CombText;
     private string[] TextBreak;
         public int timer;
     public GameObject Call; // the api to call
    
     public TextMeshProUGUI textDisplay;
     
         void Start()
         {
             AiMesh = Ai.text;
         textDisplay.text = AiMesh;
        TextChange();
    
     }
     public void TextChange()
     {
         AiMesh = Ai.text;
         TextBreak = AiMesh.Split(char.Parse("_"));
         //  textDisplay.text = AiMesh;
         count = 0;
        SuperInvoke.RunRepeat(3, 1, TextBreak.Length, RunText);
    
     void RunText()
     {
 
 
         if (count + 2 > TextBreak.Length)
         {
             CombText = TextBreak[count] + " " + TextBreak[count + 1];
              count = 0;
             Call.GetComponent<TestChatEasy>().Call();
          }
         if (count + 1 > TextBreak.Length)
         {
             Call.GetComponent<TestChatEasy>().Call();
         }
 
         if (count > TextBreak.Length) //was old one
         {
             count = 0;
             Call.GetComponent<TestChatEasy>().Call();
          
         }
         if (count >= 0)
         {
             if (TextBreak.Length < 2)
             {
                 CombText = TextBreak[count] + " " + TextBreak[count + 1];
                 textDisplay.text = CombText;
                 count = 0;
                 Call.GetComponent<TestChatEasy>().Call();
                //   TextChange();
             }
             if (TextBreak.Length < 1)
             {
                 CombText = TextBreak[count];
                 textDisplay.text = CombText;
                 count = 0;
                 Call.GetComponent<TestChatEasy>().Call();
               //   TextChange();
             }
             if (TextBreak.Length > 3)
             {
                 count = count + 1;
                 CombText = TextBreak[count] + " " + TextBreak[count + 1] + " " + TextBreak[count + 2];
                 textDisplay.text = CombText;
             }
 
         }
     }

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Firnox · Feb 02 at 02:09 PM

I am assuming your Call.GetComponent<TestChatEasy>().Call(); updates Ai.text and calls the TextChange() function. In which case I'd do this using a coroutine.

   public void TextChange() {
     StartCoroutine(RunText(Ai.text));
   }
   
   
   IEnumerator RunText(string words) {
     string[] word = words.Split('_');
     string output;
     int idx = 0;
     while (idx < word.Length) {
       // The condition above ensures that the first word is available.
       output = word[idx++];
       for (int i = 0; i < 2; i++) {
         // Break out if we run out of words, else add them on.
         if (idx >= word.Length) { break; }
         output += " " + word[idx++];
       }
       // Set the text.
       textDisplay.text = output;
       // Wait for 2 seconds
       yield return new WaitForSeconds(2);
     }
     // When we reach here we've finished with the words get some more.
     Call.GetComponent<TestChatEasy>().Call();
   }

Comment
Add comment · Show 3 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image dlstilts · Feb 02 at 02:45 PM 0
Share

Hi Thank you for your answer. I just tried it an unfortunately I am getting an out of range error. I adjusted the code to add in the inco$$anonymous$$g text but it should not have effected the coroutine?

Here is the error: IndexOutOfRangeException: Index was outside the bounds of the array. DisplayTXTNew+d__10.MoveNext () (at Assets/Scripts/DisplayTXTNew.cs:41) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0)

Please let me know if there is any advice how to fix this. Thank you. Here is the new code:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 using UnityEngine.UI;
 
 public class DisplayTXTNew : MonoBehaviour
 {
     public Text Ai;
     public string AiMesh;
     string[] word;
     public GameObject Call;
     //  TextMeshPro textmeshPro;
     public TextMeshProUGUI textDisplay;
 
     // Start is called before the first frame update
     void Start()
     {
         TextChange();
     }
      
     public void TextChange()
     {
         AiMesh = Ai.text;
        // word = AiMesh;
         StartCoroutine(RunText(Ai.text));
     }
 
 
     IEnumerator RunText(string words)
     {
         word = AiMesh.Split(char.Parse(" "));
         string output;
         int idx = 0;
         while (idx < words.Length)
         {
             // The condition above ensures that the first word is available.
             output = word[idx++];
             for (int i = 0; i < 2; i++)
             {
                 // Break out if we run out of words, else add them on.
                 if (idx >= words.Length) { break; }
                 output += " " + words[idx++];
             }
             // Set the text.
             textDisplay.text = output;
             // Wait for 2 seconds
             yield return new WaitForSeconds(2);
         }
         // When we reach here we've finished with the words get some more.
         Call.GetComponent<TestChatEasy>().Call();
     }
 
   
 }
 
avatar image Firnox dlstilts · Feb 02 at 05:19 PM 0
Share

Sorry there was a bug in my original code, I didn't actually run it to test it sorry. I have modified that now. The issue is that the comparisons are on words.Length in the while and if statement. They should be on "word.Length" (I also should have chosen better names for the variables!). So what this is doing is comparing it to the length of the string, not the number of words. Simlarly words[idx++] should have been word[idx++]

avatar image dlstilts Firnox · Feb 03 at 02:10 AM 0
Share

Thank you so much for all of your help!!!! This is working so well! I will read up more about coroutines for the next project. Cheers!

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

791 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

What's your equivalent of old GUIStyle ? 0 Answers

Planning Text Scroll with Unity UI 0 Answers

How to know the font height in pixels (and other attributes) of a text? 1 Answer

Which type of Variable do I need to use to change the Value of a text UI object ? 0 Answers

Display user Input to a text UI element. 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges