[ÇÖZÜLDÜ]Unity'de Zaman Bitince Sesin Düzgün Çalmaması

      [ÇÖZÜLDÜ]Unity'de Zaman Bitince Sesin Düzgün Çalmaması

      Merhaba arkadaşlar,uzun süredir çözmeye çalıştığım bir sorun var. Oyunumda bu kodla zaman bitince GameOver(); fonksiyonu devreye giriyor, fonksiyon devreye girince ses çalıyor ve bir saniye sonra ise level yeniden yükleniyor. Aynı zamanda bu GameOver(); top fall objesine değince devreye giriyor. Buraya kadar her şey normal ancak top aşağı düştüğünde sorunsuzca çalan gameOver.mp3 zaman bitince ağır çekimdeymiş gibi çalıyor, neden? Şimdiden teşekkürler. İyi Forumlar :)

      KOD:

      Source Code

      1. var times:float=20.0;
      2. var timerText:Text;
      3. var gameOver:AudioClip;
      4. function Update ()
      5. {
      6. if(times>0)
      7. {
      8. times-=Time.deltaTime;
      9. timerText.text= "" + Mathf.Round(times)
      10. }
      11. else
      12. {
      13. GameOver();
      14. }
      15. }
      16. function OnCollisionEnter (object:Collision)
      17. {
      18. if(object.gameObject.tag == "fall")
      19. {
      20. GameOver();
      21. }
      22. }
      23. function GameOver ()
      24. {
      25. GetComponent.<AudioSource>().PlayOneShot(gameOver);
      26. yield WaitForSeconds(1.09);
      27. Application.LoadLevel(0);
      28. }
      Bende sıkıntı göremedim belki mantıksal hata olabilir. Birde şöyle deneyebilirsin:

      Source Code

      1. var times:float=20.0;
      2. var timerText:Text;
      3. var gameOver:AudioClip;
      4. var isGameOver = false;
      5. var aaa:AudioSource;
      6. function Start(){
      7. AudioSource aaa = GetComponent.<AudioSource>();
      8. }
      9. function Update (){
      10. if(times>0){
      11. times-=Time.deltaTime;
      12. timerText.text= "" + Mathf.Round(times)
      13. }else{
      14. GameOver();
      15. }
      16. if(isGameOver && !aaa.isPlaying){
      17. Application.LoadLevel(0);
      18. }
      19. }
      20. function OnCollisionEnter (object:Collision){
      21. if(object.gameObject.tag == "fall"){
      22. GameOver();
      23. }
      24. }
      25. function GameOver (){
      26. aaa.PlayOneShot(gameOver);
      27. isGameOver = true;
      28. }


      yazım hataları olabilir c# kullanıyorum normalde.
      Gameover fonksiyonunda 1.09 saniyelik bir bekleme eklemişsin ve update fonksiyonunda süre sıfır olduğu sürece update her çağrıldığında yenideb game over fonksiyonu çağrılıyor yani o 1.09 saniyelik bekleme süresinde yaklaşık 50 kez gameover fonksiyonu çağrılıyor ve hepsi aynı anda aynı müziği çalmaya çalışıyor. Bir bool değişkeni tanımlayın bool değişkeni ilk başta false olsun, updatte süre sıfır olunca ve değişken false iken gameover fonksiyonunu çağırın. gameover çağrılırken değişknei true olarak değiştirin ve böylrce fonksiyon bikere çağrılacaktır..


      Gameover fonksiyonunda 1.09 saniyelik bir bekleme eklemişsin ve update fonksiyonunda süre sıfır olduğu sürece update her çağrıldığında yenideb game over fonksiyonu çağrılıyor yani o 1.09 saniyelik bekleme süresinde yaklaşık 50 kez gameover fonksiyonu çağrılıyor ve hepsi aynı anda aynı müziği çalmaya çalışıyor. Bir bool değişkeni tanımlayın bool değişkeni ilk başta false olsun, updatte süre sıfır olunca ve değişken false iken gameover fonksiyonunu çağırın. gameover çağrılırken değişknei true olarak değiştirin ve böylrce fonksiyon bikere çağrılacaktır..​


      Denedim ve şöyle bir şey yaptım:

      Source Code

      1. ​var times:float=20.0;
      2. var timerText:Text;
      3. var gameOver:boolean=false;
      4. var gameEnd:AudioClip;
      5. function Update ()
      6. {
      7. if(times>0)
      8. {
      9. times-=Time.deltaTime;
      10. timerText.text= "" + Mathf.Round(times)
      11. }
      12. else
      13. {
      14. gameOver=true;
      15. GameOver();
      16. }
      17. }
      18. function OnCollisionEnter (object:Collision)
      19. {
      20. if(object.gameObject.tag == "fall")
      21. {
      22. gameOver=true;
      23. GameOver();
      24. }
      25. }
      26. function GameOver ()
      27. {
      28. if(gameOver)
      29. {
      30. GetComponent.<AudioSource>().PlayOneShot(gameEnd);
      31. yield WaitForSeconds(1.09);
      32. Application.LoadLevel(0);
      33. }
      34. }


      Hala aşağı düşünce ses normal, zaman bitince uzun ve ağır çekimde imiş gibi oluyor...

      Ayrıca diğer yöntemleri de denedim olmadı...
      User Avatar

      Post by “BugZone344” ()

      This post was deleted by the author themselves ().
      Tamamdır yaptım. Sonunda :D Şöyle bir kod yazdım bu arada üstteki mesajda anlamamışım :D

      time.js diye bir kod açtım ve şunları yazdım :

      Source Code

      1. ​#pragma strict
      2. import UnityEngine.UI;
      3. var times:float=10.0;
      4. var timerText:Text;
      5. var gameOver:AudioClip;
      6. var gameLose:boolean=false;
      7. function Update ()
      8. {
      9. if(times>0)
      10. {
      11. times-=Time.deltaTime;
      12. timerText.text= "" + Mathf.Round(times);
      13. }
      14. else
      15. {
      16. if(!gameLose)
      17. {
      18. GameOver();
      19. }
      20. }
      21. }
      22. function GameOver ()
      23. {
      24. gameLose=true;
      25. GetComponent.<AudioSource>().PlayOneShot(gameOver);
      26. yield WaitForSeconds(1.09);
      27. Application.LoadLevel(0);
      28. }


      Teşekkürler herkese özellikle freedream ve skylander'a :D