Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AudioSource在游戏对象被销毁之前未播放_C#_Unity3d_Unity5_Audio Player - Fatal编程技术网

C# AudioSource在游戏对象被销毁之前未播放

C# AudioSource在游戏对象被销毁之前未播放,c#,unity3d,unity5,audio-player,C#,Unity3d,Unity5,Audio Player,在此过程中,当单击“点火”按钮时,它会创建一个激光对象,然后在屏幕上飞过,当它击中坏人对象时,它会播放爆炸声并删除激光和坏人对象 我无法让它播放爆炸声,但它确实删除了两个对象,并且没有抛出任何类型的错误。我把爆炸声附加到了那个坏蛋身上,并说在物体被摧毁之前播放坏蛋的音频源 using UnityEngine; using System.Collections; public class LaserFire : MonoBehaviour { public float laserSpe

在此过程中,当单击“点火”按钮时,它会创建一个激光对象,然后在屏幕上飞过,当它击中坏人对象时,它会播放爆炸声并删除激光和坏人对象

我无法让它播放爆炸声,但它确实删除了两个对象,并且没有抛出任何类型的错误。我把爆炸声附加到了那个坏蛋身上,并说在物体被摧毁之前播放坏蛋的
音频源

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);
    }
}
使用UnityEngine;
使用系统集合;
公共级激光点火:单行为{
公共浮子激光速度=10f;
//用于初始化
无效开始(){
//射击时,播放射击的声音效果
GetComponent().Play();
}
//每帧调用一次更新
无效更新(){
//随时间在屏幕上移动对象
transform.Translate(0f,激光速度*Time.deltaTime,0f);
}
无效OnTriggerEnter2D(碰撞的R2D对象)
{
//如果激光击中坏人,播放与坏人相连的音频剪辑
hitObject.GetComponent().Play();
摧毁(hitObject.gameObject);
摧毁(游戏对象);
}
}

这里的问题是,尽管
音频源
正在成功播放(因为没有错误),但它在实际播放声音片段之前就被破坏了。在开始播放后,您将
Destroy()
其关联的
GameObject
,这将立即有效地停止播放

为了解决这个问题,考虑使用:

void OnTriggerEnter2D(碰撞的R2D对象)
{
//如果激光击中坏人,播放与坏人相连的音频剪辑

AudioSource hitAudio=hitObject.GetComponent可能更适用。

这里的问题是,尽管
AudioSource
正在成功播放(因为没有错误),但它在实际播放声音片段之前就被销毁了。在开始播放之后,您可以
Destroy()
其关联的
游戏对象
,可立即有效停止播放

为了解决这个问题,考虑使用:

void OnTriggerEnter2D(碰撞的R2D对象)
{
//如果激光击中坏人,播放与坏人相连的音频剪辑

AudioSource hitAudio=hitObject.GetComponent可能更适用。

Hi,您的问题解决了吗?如果没有,请更新您的问题,说明现有答案如何未成功回答您的问题。谢谢!Hi,您解决过问题吗?如果没有,请更新您的问题,说明问题的解决方式g answers没有成功回答您的问题。谢谢!很抱歉延迟回复!由于某些原因,这不起作用。但是,当我注释掉Destroy(hitObject.gameObject)时;你是对的,它确实播放了声音;但是即使创建了临时对象,它仍然没有播放。声音片段是否应该存储在正在销毁的对象上?@uofarob啊,你是对的!对不起,我在想
PlayClipAtPoint()
-我已经相应地更新了我的答案,如果有帮助,请告诉我。成功了!非常感谢!很抱歉延迟响应!由于某些原因,这不起作用。但是,当我注释掉Destroy(hitObject.gameObject)时;你是对的,它确实播放了声音;但是即使创建了临时对象,它仍然没有播放。声音片段是否应该存储在正在销毁的对象上?@uofarob啊,你是对的!对不起,我在想
PlayClipAtPoint()
-我已经相应地更新了我的答案,如果有帮助,请告诉我。成功了!非常感谢!
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);
}