2016-04-03 21 views
0

Bu prosedürde, yangın düğmesine tıklandığında, kötü adam nesnesine çarptığında ekran boyunca uçabilen bir lazer nesnesi oluşturur, bir patlama sesi çıkarır ve lazeri siler. ve kötü adam nesnesi.AudioSource GameObject önce oynatılmıyor

Bir patlama sesi çalmasını sağlayamıyorum, ancak iki nesneyi siliyor ve herhangi bir hata türünü atmıyor. Patlama sesini kötü adama bağladım ve kötü adamın AudioSource'unu nesnelerin yok edilmeden önce oynadığını söyledim.

using UnityEngine; 
using System.Collections; 

public class LaserFire : MonoBehaviour { 

    public float laserSpeed = 10f; 

    // Use this for initialization 
    void Start() { 
     //when the shot is fired, play the sound effect for a shot fired 
     GetComponent<AudioSource>().Play(); 
    } 

    // Update is called once per frame 
    void Update() { 
     //moves the object across the screen over time 
     transform.Translate(0f, laserSpeed * Time.deltaTime, 0f); 
    } 

    void OnTriggerEnter2D(Collider2D hitObject) 
    { 
     //if the laser hits a bad guy, play the audio clip attached to the bad guy 
     hitObject.GetComponent<AudioSource>().Play(); 
     Destroy(hitObject.gameObject); 
     Destroy(gameObject); 
    } 
} 
+0

Merhaba, sorununuzu çözdünüz mü hiç? Yanıtlanmadıysa, lütfen mevcut yanıtların sorunuzu başarıyla yanıtlamadığını belirtmek için sorunuzu güncelleyin. Teşekkürler! – Serlite

cevap

1

Buradaki sorun AudioSource rağmen başarıyla (hiçbir hata olmadığından) oynuyor aslında kendi ses klipte uzaklaşmasına önce, onun yok ediliyor olmasıdır. Oynamaya başladıktan hemen sonra, oynatmayı hemen durduran Destroy() ile ilişkili GameObject.

AudioSource.PlayClipAtPoint() kullanmayı düşünün, bu adrese:

void OnTriggerEnter2D(Collider2D hitObject) 
{ 
    //if the laser hits a bad guy, play the audio clip attached to the bad guy 
    AudioSource hitAudio = hitObject.GetComponent<AudioSource>(); 
    AudioSource.PlayClipAtPoint(hitAudio.clip, transform.position); 
    Destroy(hitObject.gameObject); 
    Destroy(gameObject); 
} 

Bu yöntem oynamak, üzerinde AudioSource ile geçici bir nesne örneğini ve bir kez çalma bitirir onu yok edecek. Bu nedenle, ölçeğiniz arttığında bu yöntemin kullanımına dikkat etmelisiniz; Oluşturulan çöp nedeniyle performans sorunları yaratabilir, bu nedenle object pooling daha sonra uygulanabilir.

+0

Gecikmiş cevap için özür dilerim! Bu bir sebepten dolayı çalışmıyor. Ancak, Destroy (hitObject.gameObject); o zaman sesin çaldığı doğru; Ancak, geçici nesne oluştururken bile, hala oynatılamaz. Ses klibi imha edilen nesnede saklanmamalı mı? – uofarob

+0

@uofarob Ah, haklısın! Maalesef, 'PlayClipAtPoint()' yi düşünüyordum - Cevabımı buna göre güncelledim, eğer yardımcı olursa haberim olsun. – Serlite

+0

Bu başardı! Çok teşekkürler! – uofarob

İlgili konular