Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

I tried to make a speech bubble but the text always ends up bypassing the edge of the bubble ...

Discussion in 'Scripting' started by trmhtk2_unity, Jun 3, 2021.

  1. trmhtk2_unity

    trmhtk2_unity

    Joined:
    Mar 29, 2020
    Posts:
    35
    Hello everyone,
    I recently tried to make a speech bubble by using this video of code monkey unity:


    And what happened is that the text appears and everything but it always bypasses the edge of the bubble at the end.
    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using TMPro;
    5.  
    6. public class ChatBubble : MonoBehaviour
    7. {
    8.     public Vector2 offsetIcon = new Vector2(-2f, 0);
    9.     public Vector2 paddingSize = new Vector2(2f,2f);
    10.     public Vector2 PostionOffset = new Vector2(2f,2f);
    11.     public float PaddingPlus =2f;
    12.     private SpriteRenderer backgroundSpriteRender;
    13.     private SpriteRenderer iconSpriteRender;
    14.     private TextMeshPro textMeshPro;
    15.     public string Text;
    16.  
    17.     public enum IconType {Happy,Neutrel,Angry }
    18.     [Header("Icon")]
    19.     [SerializeField] private Sprite HappySpriteIcon;
    20.     [SerializeField] private Sprite NautrelSpriteIcon;
    21.     [SerializeField] private Sprite AngrySpriteIcon;
    22.     private void Awake()
    23.     {
    24.         backgroundSpriteRender = transform.Find("Background").GetComponent<SpriteRenderer>();
    25.         iconSpriteRender = transform.Find("Icon").GetComponent<SpriteRenderer>();
    26.         textMeshPro = transform.Find("Text").GetComponent<TextMeshPro>();
    27.     }
    28.     private void Start()
    29.     {
    30.     }
    31.     private void FixedUpdate()
    32.     {
    33.         Setup(IconType.Angry,Text);
    34.      
    35.     }
    36.     private void Setup(IconType iconType,string text)
    37.     {
    38.         textMeshPro.SetText(text);
    39.         textMeshPro.ForceMeshUpdate();
    40.        Vector2 textSize = textMeshPro.GetRenderedValues(false);
    41.         Vector2 padding = paddingSize;
    42.         backgroundSpriteRender.size = new Vector2
    43.             (textSize.x + padding.x * PaddingPlus, textSize.y + padding.y);
    44.  
    45.         backgroundSpriteRender.transform.localPosition =
    46.         new Vector3(backgroundSpriteRender.size.x / PostionOffset.x,PostionOffset.y) + (Vector3)offsetIcon;
    47.         iconSpriteRender.sprite = GetIcon(iconType);
    48.     }
    49.     private Sprite GetIcon(IconType iconType)
    50.     {
    51.         switch (iconType)
    52.         {
    53.             default:
    54.             case IconType.Happy: return HappySpriteIcon;
    55.                 break;
    56.             case IconType.Neutrel: return NautrelSpriteIcon;
    57.                 break;
    58.             case IconType.Angry:  return AngrySpriteIcon;
    59.                 break;
    60.          
    61.                  
    62.         }
    63.     }
    64. }
    65.  
    (Sorry for my poor English, I use Google Translate)
    Please help me fast! This is very important!
     
  2. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    36,762
    This is the example I always start from. See attached.
     

    Attached Files:

  3. trmhtk2_unity

    trmhtk2_unity

    Joined:
    Mar 29, 2020
    Posts:
    35
    thanks!!!
     
    Kurt-Dekker likes this.