Jump to content
Unity Insider Forum

"Automatic Scrolling Text" erstellen


w0rks

Recommended Posts

Hallo da :)

Möchte folgendes erstellen & zwar einen Text der sich automatisch von Rechts nach Links bewegt.

Hört sich zwar einfach an aber leider gibt es ~nix gscheits~ im Internet zu finden, alles was ich bisher gefunden habe, funktioniert entweder nicht mehr ordentlich oder entspricht nicht nach dem was ich genau haben möchte 😕 

Habe dies gefunden: Youtube Video

https://forum.unity.com/threads/scrolling-text-from-left-to-right.670984/

https://answers.unity.com/questions/1236687/marqueescrolling-text-with-unity-46-ui.html

https://forum.unity.com/threads/news-style-horizontal-scrolling-text-with-content-from-a-website-stored-text-file.310091/

Das was ich haben möchte ist: . . das sich der Text von Rechts nach Links bewegen sollte. >> Dann eine Weile nicht mehr erscheint << und dann wieder von Rechts nach Links bewegt usw.

Hat da jemand Erfahrung mit ? °°

Wäre wirklich wirklich dankbar wenn mir jemand da unter die Arme greifen könnte :)

 

MFG

w0rks

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Klar wäre Animieren am einfachsten, aber dann stimmt die zeit nicht mehr bei unterschiedlichen Auflösungen (Wegen dem Bildschirmrand)

>z.B.< es sollte 5 Sekunden nichts mehr kommen bis der gleiche Text nochmals erscheint. Bei einem anderem Bilschirm kommt dann der text nicht in diesem 5 Sekunden sondern früher oder dann später [Es sollte schon denn gleichen zeit Abstand haben]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oder halt einfach konstant nach links schieben und beim verlassen des Bildschirms einmal nach rechts teleportieren?

Normalerweise poste ich nicht so gerne fertigen Code, aber wenn ich hier das nötigste aufschreibe, ist's halt schon vollständig :)

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(RectTransform))]
public class MarqueeAnimator : MonoBehaviour
{
    private RectTransform rectTransform;
    private RectTransform parent;
    public float speed;
    public float waitTime;
    private WaitForSeconds wait;


    private void Awake()
    {
        rectTransform = (RectTransform)transform;
        parent = (RectTransform)transform.parent;

        wait = new WaitForSeconds(waitTime);
    }

    private void Start()
    {
        rectTransform.pivot = new Vector2(0f, 0.5f);
        rectTransform.anchorMin = new Vector2(0f, 0.5f);
        rectTransform.anchorMax = new Vector2(0f, 0.5f);
    }

    private void OnEnable()
    {
        StartCoroutine(Animate());
    }

    private void OnDisable()
    {
        StopAllCoroutines();
    }

    private IEnumerator Animate()
    {
        while (enabled)
        {
            JumpToRight();
            yield return MoveToLeft();
            yield return wait;
        }
    }

    private void JumpToRight()
    {
        rectTransform.anchoredPosition = new Vector2(parent.rect.width, 0f);
    }

    private IEnumerator MoveToLeft()
    {
        while (rectTransform.anchoredPosition.x + rectTransform.rect.width > 0f)
        {
            rectTransform.anchoredPosition += Vector2.left * speed * Time.deltaTime;
            yield return null;
        }
    }
}

Das Textobjekt kommt als Child in ein (leeres?) GameObject und scrollt dann von "rechts vom Parent" zu "links vom Parent", wartet, und springt zurück. Naja, der Ablauf ist ja recht einfach abzulesen, würde ich sagen.

Was halt noch stinkt ist die feste Geschwindigkeit. Die taugt nicht im Bezug auf verschiedene Canvas-Auflösungen. Da könnte man evtl. noch (in der Zeile vor dem yield return null;) die Breite des Root Canvas draufmultiplizieren oder so.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...