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 henrypuspurs · Aug 18, 2013 at 10:35 AM · c#audiotriggerif-statements

Trigger to play music needs to check if the same music is already playing

Im making a music based game and I want to use colliders to change the music playing in the background very frequently (loop and sample based, no long tracks). I got the basic script working, my problem now is I want to suppress the Play commands being called if the player enters the same collider more than once sequentially, I tried using IF statements to check if the clips on the player are the same as those the trigger is trying to load. Unfortunately it seems to just stop any other colliders changing the music too.

  using UnityEngine;
 
 public class AudioTrigger : MonoBehaviour 
 {
     public AudioClip loopAudio;
     public AudioClip oneShotAudio;
     private GameObject player;
     private AudioSource listeneroneshot;
     private AudioSource listener;
 
     void Start()
     {
         player = GameObject.Find("Player/Camera");
         listener = player.GetComponent<AudioSource>();
         listener.playOnAwake = false;
         GameObject playeroneshot = GameObject.Find("Player/Camera/Oneshotplay");
         listeneroneshot = playeroneshot.GetComponent<AudioSource>();
         listeneroneshot.playOnAwake = false;
     }
 
     void OnTriggerEnter (Collider player)
     {
         if(!listeneroneshot.clip == oneShotAudio && !listener.clip == loopAudio)
         {
             listeneroneshot.Stop ();
             listeneroneshot.clip = oneShotAudio;
             listeneroneshot.loop = false;
             listeneroneshot.Play ();
             listener.Stop();
             listener.clip = loopAudio;
             listener.loop = true;
             listener.Play();
         }
     }
 }
 
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

Answer by Sajidfarooq · Aug 18, 2013 at 11:08 AM

You are looking at it from the wrong end. Don't worry about suppressing the "music". Worry about how you can check if the "same" collider has been accessed more than once sequentially.

Create a static variable that stores the "id" of the last collider that was hit. Then, on every collision/trigger, check if current_collision==previous_collision. Only if its false, play the music.

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 henrypuspurs · Aug 18, 2013 at 12:22 PM 0
Share

Thanks for that, you'll have to excuse my inexperience Ive only been attempting to code anything for a couple of months, but can you give me any more specifics? $$anonymous$$ore precisely is there an instance ID that unity uses if I use the same prefab for all the colliders? And would I have to store the last instance ID hit on a seperate script (Im guessing on the player) and reference that in the Audiotrigger script?

avatar image Sajidfarooq · Aug 18, 2013 at 01:10 PM 0
Share

You can assign different "tags" to different objects to differentiate them. You can also use GetInstanceId.

You can store the tag/ID of the collider that is hit in the beginning of the same script.

avatar image Sajidfarooq · Sep 03, 2013 at 11:39 PM 0
Share

Remember to mark this question as "answered" if your problem was solved.

avatar image henrypuspurs · Sep 07, 2013 at 05:00 PM 0
Share

I haven't done much with this part of my project yet, if I get it to work with your approach then I will mark it as answered.

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

16 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

Related Questions

If statement failing OnTriggerEnter 0 Answers

Distribute terrain in zones 3 Answers

Script to trigger all audio playing to stop, and play a different audio? 1 Answer

GetComponent().Play(); Question(s) 2 Answers

Cant get into the second if statment 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