(我是Unity的新手)我正在开发一款以爱的世界为灵感的游戏.除了主菜单之外,我还有多个游戏场景.我还有多个游戏对象,在玩家与它们互动后,它们会被销毁.有些在触发器退出时或在IE数字符后被销毁.当玩家使用静态布尔框切换场景时,我会将它们销毁.我的问题是,在物品被销毁后,如果我想开始一场新的游戏,它们会一直被销毁.我不知道怎么重置它们.这里有一个例子.我制作了一只乌鸦来播放动画,动画播放完后,它就被销毁了. 以下是代码

{
    
    public Animator anim;
    public AudioSource audioSource;
    public AudioSource Flyingsound;
    public GameObject Crow;
    public GameObject trigger;
    static bool m_IsDeleted = false;
    static bool n_IsDeleted = false;
   
    public void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            anim.SetTrigger("Flying");
            audioSource.Play();
            GetComponent<BoxCollider2D>().enabled = false;
            Flyingsound.Play();
            StartCoroutine(crow(4));
            m_IsDeleted = true;
            n_IsDeleted = true;
        }   
    }
    
   IEnumerator crow(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);
        Destroy(Crow);
        Destroy(this);  
    }
   
    public void Awake()
    {
        if (m_IsDeleted)
            Destroy(Crow);
        if(n_IsDeleted)
            Destroy(this);
    }
}

我试图访问主菜单脚本中的bool,并在"开始新游戏"按钮单击时将其重置为false,但由于是静态的并且具有"由于保护级别而无法访问"错误,我无法访问它,如果我将bool设置为公共,则游戏对象不再保持在场景之间销毁. 我不知道重新设置这些游戏对象时,开始一个新的游戏或什么是变通办法这.. 主菜单脚本是:

public GameObject gameObject;

    public void PlayGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        gameObject.SetActive(false);
        PlayerPrefs.DeleteKey("p_x");
        PlayerPrefs.DeleteKey("p_y");
        PlayerPrefs.DeleteKey("TimeToLoad");
        PlayerPrefs.DeleteKey("Saved");
    }

    public void QuitGame()
    {
        Application.Quit();
    }

    public void ContinueGame()
    {
        if(PlayerPrefs.GetInt("LoadSaved") == 1)
        {
            SceneManager.LoadScene(PlayerPrefs.GetInt("SavedScene"));
            gameObject.SetActive(false);
        }
        else
        {
            return;
        }
    }

推荐答案

只要有一个初始场景,唯一的工作就是加载全局状态,使用用户首选项.

步骤:

  1. 加载第一个场景
  2. 场景从用户首选项加载数据
  3. 使用步骤2中的数据更新全局不可 destruct 类实例

在销毁物品时.只需将所述对象/元素的唯一ID添加到用户首选项.

然后,当游戏加载时,它将执行上述操作.

当你加载游戏场景时,只需判断全局类实例,如果它的id在那里,那么就不要产生它.

Global Class Instance - source

Csharp相关问答推荐

有没有办法把+02:00转换成TimeSpan?""

实体框架核心上是否支持使用NPGSQL的字符串聚合?

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

在实时数据库中匹配两个玩家的问题

为什么在使用动态obj+类obj时会调用串联?

如何将此方法参数化并使其更灵活?

使用带有参数和曲面的注入失败(&Q;)

是否有必要在ASP.NET Core中注册可传递依赖项?

Google OAuth令牌交换在.Net中不起作用

我可以查看我们向应用程序洞察发送了多少数据吗?

当我将`ConcurentDictionary`转换为`IDictionary`时,出现了奇怪的并发行为

从Base64转换为不同的字符串返回相同的结果

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

在C#中通过Matheval使用自定义公式

将文本从剪贴板粘贴到RichTextBox时,新文本不会在RichTextBox ForeColor中着色

使用生产环境调试我的应用程序的快速方法

是否在异步方法中避免Span<;T>;.ToArray()?

如何获取我在SQL中输入的值

能否将我图表中的星号与X轴上一天中的第二位数字对齐?

OPC UA标签收集(OPCFoundation NETStandard库,代码更正)