我一直遇到这个奇怪的问题,当我将 UI 设为预制件时,它会破坏所有按钮,因此我无法按其中任何一个按钮,我按照 Brackkeys 教程制作了此暂停菜单,但它仅在仅在在项目中的一个场景中,我第一次将其作为预制件放入,所有其他副本都已损坏。发生这种情况有什么原因吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Audio;
public class PauseMenu : MonoBehaviour
{
public static bool GameIsPaused = false;
public GameObject PauseUI;
public GameObject OptionsUI;
public AudioMixer audioMixer;
// Start is called before the first frame update
void Start()
{
PauseUI.SetActive(false);
OptionsUI.SetActive(false);
Cursor.visible = false;
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape)) {
if (GameIsPaused)
{
Resume();
}
else {
Pause();
}
}
}
public void Resume() {
PauseUI.SetActive(false);
Time.timeScale = 1f;
GameIsPaused = false;
Cursor.visible = false;
}
private void Pause () {
PauseUI.SetActive(true);
Time.timeScale = 0f;
GameIsPaused = true;
Cursor.visible = true;
}
public void QUITOnClick()
{
Debug.Log("You have clicked the button!");
Application.Quit();
}
public void Options()
{
PauseUI.SetActive(false);
OptionsUI.SetActive(true);
}
public void Back()
{
PauseUI.SetActive(true);
OptionsUI.SetActive(false);
}
public void SetVolume(float volume)
{
audioMixer.SetFloat("volume", volume);
}
}
我尝试重新添加EventManager,我尝试重新链接代码,但似乎没有什么可以解决这个问题。
当您制作预制件时,序列化引用(检查器中的拖放引用)都会中断,除非它们全部指向与预制件完全相同的层次结构中的对象。所以基本上预制件只能存储对自身及其子对象的组件的引用。
我在这里猜测,但我怀疑在你的场景中,你的按钮引用的 UI 不包含在其自己的层次结构中。因此,当您将其制作为预制件时,这些引用就被破坏了。
当您将预制件放入场景中时,您要么需要再次手动拖动所有这些引用,要么需要重新考虑您的层次结构,以便引用可以保留在预制件层次结构的内部。
如果不是这种情况,您需要编辑您的问题以提供更多背景信息,以便我们更好地帮助您。