Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 conguerror · Dec 16, 2019 at 01:55 PM · triggerguitexttextmesh

Trigger the dialogue system

Hi there. I wrote the code which should be triggered by trigger but it works before I trigger the trigger. It's just that I think I wrote everything by logic, but apparently, I did not. Thanks in advance if you help me.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 
 /// <summary>
 /// Simple dialogue system. No choices. 
 /// </summary>
 public class Dialogue : MonoBehaviour
 {
     [SerializeField] TextMeshProUGUI theText;
     [SerializeField] string[] sentences;
     [SerializeField] float typeSpeed = 0.02f;
     [SerializeField] GameObject continueButton;
     int index;
 
    
     private void OnTriggerEnter(Collider other)
     {
         if (other.tag == "Player" && Input.GetKeyDown(KeyCode.E))
         {
             StartCoroutine(StartDialogue());
             
         }
         
     }
     private void OnTriggerExit(Collider other)
     {
         if(other.tag == "Player")
         {
             continueButton.SetActive(false);
         }
     }
     public void NextSentence()//button func 
     {
         continueButton.SetActive(false);
         if (index < sentences.Length - 1)
         {
             index++;
             theText.text = "";
             StartCoroutine(StartDialogue());
         }
         else
         {
             theText.text = "";
             continueButton.SetActive(false);
         }
     }
     IEnumerator StartDialogue()
     {
         foreach (char letter in sentences[index].ToCharArray())
         {
             theText.text += letter;
             if (theText.text == sentences[index])
             {
                 continueButton.SetActive(true);
             }
             yield return new WaitForSeconds(typeSpeed);
         }
     }
 }
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
0
Best Answer

Answer by Larry-Dietz · Dec 16, 2019 at 04:57 PM

Looking at your code, it looks like it would only start the coroutine if you enter the collider, AND press E in the exact same frame.

I would try moving this into OnTriggerStay. The OnEnter only fires 1 time, when you first enter the collider, on trigger stay fires repeatedly as long as you stay in the collider.

This will continue to look for your keydown event each frame, and call the coroutine when you press E as long as you are still in the collider.

Hope this helps, -Larry

Comment
Add comment · Show 4 · 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 conguerror · Dec 17, 2019 at 03:16 PM 0
Share

Alright, will try it out . But the thing is, coroutine is started BEFORE I even enter a trigger.

avatar image Larry-Dietz conguerror · Dec 17, 2019 at 03:24 PM 0
Share

That part throws me. I just tested this here, and with the change I suggested, it appeared to be working as expected. The dialog didn't start until I entered the trigger and hit $$anonymous$$ You do have this script attached to your dialog object, correct? Not the player?

avatar image conguerror · Dec 17, 2019 at 03:36 PM 0
Share

It actually helped. Thanks a lot.

avatar image Larry-Dietz conguerror · Dec 17, 2019 at 04:03 PM 0
Share

Glad I was able to help!

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

141 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

Related Questions

Trigger Script Not Firing 4 Answers

I want to change TextMeshProUGUI based on value of a float, but I cant seem to work it. 0 Answers

Why does my trigger only fire one time? 0 Answers

3D Text (TextMesh) not updated/redrawn every frame (android only) 0 Answers

Picking up an Item and telling you how many you have 1 Answer


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