如何在Destroy()上播放声音

时间:2018-07-18 02:45:23

标签: unity3d

警告-Unity3d的新知识(大约需要4个小时的工作时间),但具有编程经验。也可以long ...

所以我有点遵循基本的“领取硬币”游戏教程。立即对其进行签名,我已经弄清楚了如何使硬币旋转/旋转,捡起硬币等。

我可以播放声音-唤醒/创建声音,或者取消选中该框并致电

request()

在我的GetComponent<AudioSource>().Play();里面,我可以听到声音。

不幸的是,当下一行呼叫onTriggerEnter() ...时,声音不会播放。我可以注释掉销毁呼叫,并且其他所有工作(包括播放拾音声音)都可以,但是我确实需要在“抓取”硬币时将它们从场景中移除。

我可以将AudioSource移到另一个不会被破坏的对象,甚至可以创建一个MyGame c#脚本来控制所有声音,硬币计数,时间等。

但是在我看来,我也应该能够制造“硬币”资产,并且我导入该资产的任何项目都应该使用自己的AS,带有它的mp3等,等等。

所以...如何创建一个独立的对象,当它与之碰撞时会发出声音,然后Destroy(gameObject)本身?

我完整的Destroy()文件-通过调整Column 3D类型对象的大小将其附加到Coin.cs。如果注释了对Coin的呼叫,则硬币上的AudioSource可以正常播放。运行适用于Linux的最新Unity3d Beta(对不起,没有Mac或Win机器,它吸收了virtualbox)。不知道如何发布项目信息等,但是如果需要告诉我...

Destroy()

1 个答案:

答案 0 :(得分:1)

如果您真的想将音频与对象自成一体,可以尝试以下方法:

public class Coin : MonoBehaviour
{
    // A generic Collider... You can be more specific if you want.
    public Collider collider;

    // Reference your renderer here.
    public MeshRenderer renderer;

    // Reference you AudioSource here.
    public AudioSource audioSource;

    public float rotate_speed = 200f;

    private bool isActive = true;

    void OnTriggerEnter ( Collider Col )
    {
        if ( Col.CompareTag ( "Player" ) )
        {
            Player.gotCoin ( );
            audioSource.Play ( );
            isActive = false;
            collider.enabled = renderer.enabled = false;
        }
    }


    void Update ( )
    {
        if ( isActive )
        {
            // make coin tumble
            transform.Rotate ( Vector3.left, rotate_speed * Time.deltaTime );
            transform.Rotate ( Vector3.back, rotate_speed * Time.deltaTime );
            transform.Rotate ( Vector3.up, rotate_speed * Time.deltaTime );
        }
        else
        {
            // If the coin is "dead", we check to see if the audio is still playing.
            // If not, we destroy the object.
            if ( !audioSource.isPlaying )
                Destroy ( gameObject );
        }
    }
}

从本质上讲,代码应该关闭对撞机,因此您不必重新触发捡起同一枚硬币并关闭渲染器,因此它不会显示在屏幕上。就玩家而言,已经不存在了。

尽管..我仍然只使用音频管理器,并使用“硬币”池(而不是销毁),因为“硬币”的数量通常很多。但这是另一天的故事。