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);
}