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 Meriodoc · Mar 10, 2015 at 04:29 PM · audiomousewaitforsecondsrepeatco-routine

How to prevent more mouse clicks that trigger sound.

My problem is that when i click on an object multiple times the sound just keeps repeating/echoing. How can i set the co-routine or function to wait until clip and animation is finished playing before allowing another mouse click? Any help will be appreciated. Thank you! Here is my snippet:

using UnityEngine; using System.Collections;

public class A_LetterScript : MonoBehaviour {

 private Animator animator;
 private int State = 0;
 private AudioSource audioSource;
 public AudioClip aPageVoice;

 void Start () 
 {
     animator = this.GetComponent<Animator>();
     animator.SetInteger ("State", 0);
 }

 private void OnMouseDown()
 {
     Debug.Log("clicked.");

     animator.SetInteger ("State", 1);
     StartCoroutine ("Sound");
     StartCoroutine ("Wait");            
             
 }

 IEnumerator Wait () 
 {
         yield return new WaitForSeconds (5.0f);
         animator.SetInteger ("State", 0);
 }

 IEnumerator Sound () 
 {
             //this is to sync my sound with my animation
             yield return new WaitForSeconds(1.2f); 
             //this is to set my volume
     audio.PlayOneShot(aPageVoice, 0.7F);

 }


}

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

3 Replies

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

Answer by Fran-Martin · Mar 10, 2015 at 05:09 PM

Hi. Try this. Declare a global variable: bool playing, initialize it to false, and modify the event mousedown for calling a second yield with the duration of the audio, after the second yield, set the variable playing to false

 bool playing;
 float audioLength;
 
 OnMouseDown(){
     if(!playing){
      StartCoroutine ("Sound");
     }
 }
 
  IEnumerator Sound () 
  {
     yield return new WaitForSeconds(1.2f); 
     audio.PlayOneShot(aPageVoice, 0.7F);
     yield return new WaitForSeconds(audioLength); 
  }



Comment
Add comment · Show 2 · 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 Meriodoc · Mar 10, 2015 at 05:33 PM 0
Share

Thanks. I will give it a go and update here.

avatar image Meriodoc · Mar 10, 2015 at 05:54 PM 0
Share

Hi Fran $$anonymous$$artin. It still triggers the sound when i keep on clicking. I need to prevent mouse click interaction for the duration of audioLength somehow? But thanks anyway!

avatar image
0

Answer by AndrewToth · Mar 10, 2015 at 08:05 PM

Try this:

 IEnumerator Sound ()
 {
 //this is to sync my sound with my animation
 yield return new WaitForSeconds(1.2f);
 //this is to set my volume
 
 if(!audioSource.isPlaying)
    audio.PlayOneShot(aPageVoice, 0.7F);
 }

http://docs.unity3d.com/ScriptReference/AudioSource-isPlaying.html

Comment
Add comment · 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
0

Answer by Meriodoc · Mar 10, 2015 at 06:08 PM

Hi this seems to work.

     private Animator animator;
 private int State = 0;
 private AudioSource audioSource;
 public AudioClip aPageVoice;
 private bool canClick = true;

 public bool playing;
 public float audioLength;

 void Start () 
 {
     animator = this.GetComponent<Animator>();
     animator.SetInteger ("State", 0);
 }




 private void OnMouseDown()
 {
     Debug.Log("clicked.");



     if (!playing && canClick) {

                     animator.SetInteger ("State", 1);
                     StartCoroutine ("Sound");
                     StartCoroutine ("Wait");            
             }    
 }

 IEnumerator Wait () 
 {
         yield return new WaitForSeconds (5.0f);
         animator.SetInteger ("State", 0);
 }

 IEnumerator Sound () 
 {

     yield return new WaitForSeconds(1.2f);
     audio.PlayOneShot(aPageVoice, 0.7F);
     StartCoroutine ("WaitSumMore");

 }
 IEnumerator WaitSumMore (){
     canClick = false;
     yield return new WaitForSeconds(audioLength); 
     canClick = true;
 }
Comment
Add comment · Show 2 · 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 Meriodoc · Mar 10, 2015 at 06:09 PM 0
Share

I used your idea and something else. Thank you. will test some more and confirm!

avatar image Meriodoc · Mar 11, 2015 at 05:50 AM 0
Share

Hi Fran. I voted you up. Our combined effort works. Thank you. Andrew your method prevents the sound from playing from the start, but i see what you had in $$anonymous$$d. tx

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

23 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

Related Questions

play audio for few seconds on key hit 1 Answer

help whit WaitForSecond use. 1 Answer

How to click only one once? 0 Answers

How do I call audio once when conditions are met? 1 Answer

How do you prevent audio from being played multiple times when using raycast? (JS) 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