我是统一的新手,不能解决一个问题。我有一个声音和一个脚本。在碰撞时它应该播放声音,它这样做了,但它也加载下一个场景,并立即停止声音。
这是我代码
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);
}
}
1条答案
按热度按时间cbjzeqam1#
Unity会自动停止您的声音,因为当您启动或加载新场景时,您的音频源处于禁用 * a状态。
你可以通过使用一些插件来避免这个问题,比如FMOD**,但是我建议使用
DontDestroyOnLoad()
来避免这个问题,这是一个很容易解决的问题。首先将audioSource放入一个空的gameObject中,使用脚本并为它添加一个随机标签,如“audioObj”。然后,您需要在附加脚本的
Awake
中调用DontDestroyOnLoad()
:这样,你可以开始播放音乐从所有的场景没有问题或音乐停止与这个简单的行:
还有
其中AudioScript是音频的脚本,
PlayMusic()
和StopMusic()
是播放和停止音乐的公共函数,但您可以对任何内容执行此操作,只需调用GameObjec.FindGameObjectWithTag("audioObj");
希望我能帮上忙!