unity3d 加载下一个场景后,音频立即停止

cetgtptt  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(428)

我是统一的新手,不能解决一个问题。我有一个声音和一个脚本。在碰撞时它应该播放声音,它这样做了,但它也加载下一个场景,并立即停止声音。
这是我代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreCounter : MonoBehaviour
{
    public GameObject Step;
    public int scoreCounter;
    public float speedGain = 0f; //-026f
    private AudioSource audioSource;
    public AudioClip Scored;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        scoreCounter++;
        if (scoreCounter == 1)
        {
            speedGain = -0.235f;
        }
        if (collision.name == "gates")
        {
            scoreCounter -= 1;
            audioSource = GetComponent<AudioSource>();
            audioSource.clip = Scored;
            audioSource.Play();
        }
        speedGain -= 0.025f;
        Instantiate(Step, new Vector2(0.0f, 5.0f), Quaternion.identity);
    }
}
cbjzeqam

cbjzeqam1#

Unity会自动停止您的声音,因为当您启动或加载新场景时,您的音频源处于禁用 * a状态。
你可以通过使用一些插件来避免这个问题,比如
FMOD**,但是我建议使用DontDestroyOnLoad()来避免这个问题,这是一个很容易解决的问题。
首先将audioSource放入一个空的gameObject中,使用脚本并为它添加一个随机标签,如“audioObj”。然后,您需要在附加脚本的Awake中调用DontDestroyOnLoad()

private void Awake()
 {
     DontDestroyOnLoad(transform.gameObject);
     audioSource = GetComponent<AudioSource>();
 }

这样,你可以开始播放音乐从所有的场景没有问题或音乐停止与这个简单的行:

GameObject.FindGameObjectWithTag("audioObj").GetComponent<AudioScript>().PlayMusic();

还有

GameObject.FindGameObjectWithTag("audioObj").GetComponent<AudioScript>().StopMusic();

其中AudioScript是音频的脚本,PlayMusic()StopMusic()是播放和停止音乐的公共函数,但您可以对任何内容执行此操作,只需调用GameObjec.FindGameObjectWithTag("audioObj");
希望我能帮上忙!

相关问题