Jump to content
Unity Insider Forum

TextMeshPro nur bei Collider aktivieren


BlackDullah

Recommended Posts

Hallo allerseits,

ich habe eine Konversation über TextMeshPro gestaltet. Vorgefertigte Texte werden durch einen "Weiter"-Button nacheinander angezeigt.

Das Funktioniert soweit.

Das geschieht bei Szenenbeginn sofort. Ich würde es gerne so haben, dass es erst aktiviert wird, wenn mein Spieler in der Nähe eines NPCs ist.

 

Ich denke wie folgt:

Spieler berührt z.B. BoxCollider2D von Objekt -> TextMeshPro wird aktiviert.

 

Hier der momentane Code:

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

public class DialogueZW : MonoBehaviour
{

    public TextMeshProUGUI textDisplay;
    public string[] sentences;
    private int index;
    public float typingSpeed;

    public GameObject continueButton;

    void Start()
    {
        StartCoroutine(Type());
    
    }

    void Update()
    {
        if(textDisplay.text == sentences[index])
        {
            continueButton.SetActive(true);

        }
    }


    IEnumerator Type()
    {
        foreach(char letter in sentences[index].ToCharArray())
        {
            textDisplay.text += letter;
            yield return new WaitForSeconds(typingSpeed);
        }
    }

    public void NextSentence()
    {

        continueButton.SetActive(false);

        if(index < sentences.Length -1)
        {
            index++;
            textDisplay.text = "";
            StartCoroutine(Type());
        }
        else
        {
            textDisplay.text = "";
            continueButton.SetActive(false);

        }

    }




}

Ich habe es versucht mit einer "if"-Abfrage:

if (other.gameObject.tag == "Player")

Aber es funktioniert nicht. Ist mein Grundgedanke falsch oder müsste es mit dieser Logik und dem richtigen Code so funktionieren?

 

Gruß,

BlackDullah

 

EDIT:

Das Script hängt an einem Object namens "DialogueManager". Ich müsste wohl einfach das gesamte Object deaktivieren und bei Berührung mit Collider das Objekt aktivieren, richtig?

EDIT 2:

Gut, dass ich ein Backup des Scripts hier habe :D

Ich habe gerade verschiedene Wege ausprobiert. Alle haben das Spiel zum abschmieren gebracht. Ich denke jedoch die Logik die ich verwenden möchte ist die Richtige.

Das Problem ist, wenn ich den DialogueManager bei Start deaktiviere, meckert das Programm, dass die Coroutine nicht ausgeführt werden kann.

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuch mal

private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Target")
        {

              // hier passiert was, wenn der Player ein Collider trifft, dessen GO das Tag "Target" hat

        }

Also OnTriggerEnter2D wird auf dem Player ausgeführt und wird aktiviert, wenn er einen Collider berührt. Player braucht auch einen Collider

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Archiviert

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

×
×
  • Neu erstellen...