(我是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相关问答推荐

在实际上是List T的 IESEARCH上多次调用First()是否不好?

Unity如何在PlayerPrefs中保存数据?

图形.DrawString奇怪异常的字距调整

Blazor-从数据库内部服务器提取错误

为什么任务需要在内部使用ManualResetEventSlim?

在路由中使用枚举

未找到任何HTTP触发器.成功部署Azure Functions Project后(c#)

Lambda表达式如何与隐式强制转换一起工作?

在C#.NET项目中启动时,如何等待提升的PowerShell进程退出?

为什么此名称不再被识别?名称不存在于当前上下文中?

在C#中有没有办法减少大型数组中新字符串的分配?

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

如何从Entity Framework Core中填充ListIInterface

类/值和日期的泛型方法

无法向Unity注册Microsoft Logger

RavenDb:为什么在字符串==空的情况下过滤会过滤得太多?

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

我可以阻止类型上的Object.ToString()吗?

C#Web服务转换为 node /Express不工作

在SQL中删除少于24小时的令牌