【发布时间】:2018-12-14 09:15:01
【问题描述】:
我已经在 Stack Overflow 和 Internet 上检查了其他问题 here,但找不到类似的问题。
我有一个“设置场景”,我想在其他场景中切换特定的音频剪辑(例如,我想只在游戏场景(场景 7)中的设置场景(场景 2)中静音倒数计时器声音)。
在带有倒数计时器的游戏场景中,我附加了一个音频剪辑,我想从设置场景访问它并发送timerHandler.ToggleMuteTimer(false)
这里有一些代码:
public class TimerSoundHandler : MonoBehaviour {
public GameObject audioOnIcon;
public GameObject audioOffIcon;
private TimerHandler timerHandler;
void Start()
{
//timerHandler = GameObject.FindWithTag("TimerTAG").GetComponent<TimerHandler>();
//timerHandler = GameObject.FindGameObjectWithTag("TimerTAG");
timerHandler = FindObjectOfType<TimerHandler>();
SetSoundState();
}
public void ToggleSound()
{
if (PlayerPrefs.GetInt("TimerMuted", 0) == 0)
{
PlayerPrefs.SetInt("TimerMuted", 1);
}
else
{
PlayerPrefs.SetInt("TimerMuted", 0);
}
SetSoundState();
}
public void SetSoundState()
{
if (PlayerPrefs.GetInt("TimerMuted", 0) == 0)
{
UnmuteSound();
}
else
{
MuteSound();
}
}
private void UnmuteSound()
{
//timerHandler.ToggleMuteTimer(true);
audioOnIcon.SetActive(true);
audioOffIcon.SetActive(false);
}
private void MuteSound()
{
//timerHandler.ToggleMuteTimer(false);
audioOnIcon.SetActive(false);
audioOffIcon.SetActive(true);
}
}
这是 TimerHandler 脚本:
public class TimerHandler : MonoBehaviour {
public Text timerText;
public AudioClip timerClipSound;
[Range(0,3600)]
[SerializeField]
private float totalTime = 300f;
private bool timeUp = false;
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
if (timeUp)
return;
totalTime -= Time.deltaTime;
string minutes = ((int)totalTime / 60).ToString("00");
string seconds = (totalTime % 60).ToString("00");
timerText.text = minutes + ":" + seconds;
if (totalTime <= 0)
{
timeUp = true;
audioSource.mute = true;
}
}
public void ToggleMuteTimer(bool value)
{
audioSource.mute = value;
}
}
任何想法如何访问和编辑尚未实例化的游戏对象?
【问题讨论】:
-
我发现保存单独的设置文件更容易。它需要在初始创建时加载并与您的变量一起存储,但您可以将其全部设置为默认值。然后你可以在保存场景中编辑这个文件,在游戏场景中加载这个文件
标签: unity3d gameobject