Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 学习如何统一存储和加载;由于未知原因遇到错误CS1513_C#_Unity3d - Fatal编程技术网

C# 学习如何统一存储和加载;由于未知原因遇到错误CS1513

C# 学习如何统一存储和加载;由于未知原因遇到错误CS1513,c#,unity3d,C#,Unity3d,所以我一直在为我的Unity项目制作一个保存/加载脚本,它看起来像这样(请不要复制): 我想就是这样。CS1513不在里面。如果你发现任何错误,请告诉我。但问题是我正在制作的另一个脚本在关闭应用程序时会自动保存。它看起来像这样(请不要复制): 现在我知道void-OnApplicationQuit()下的代码应该是我的保存例程。我不确定我的保存脚本的哪一部分是我的保存例程。因此,如果您能帮助我,请随时检查我的保存/加载脚本,并告诉我实际的保存例程是什么。但无论如何,它总是告诉我“错误,}”预期(

所以我一直在为我的Unity项目制作一个保存/加载脚本,它看起来像这样(请不要复制):

我想就是这样。CS1513不在里面。如果你发现任何错误,请告诉我。但问题是我正在制作的另一个脚本在关闭应用程序时会自动保存。它看起来像这样(请不要复制):

现在我知道
void-OnApplicationQuit()
下的代码应该是我的保存例程。我不确定我的保存脚本的哪一部分是我的保存例程。因此,如果您能帮助我,请随时检查我的保存/加载脚本,并告诉我实际的保存例程是什么。但无论如何,它总是告诉我“错误,}”预期(11,7)CS1513“,我检查我的脚本。我读过另一篇文章,答案是这个错误意味着我忘记了脚本末尾的结尾“}”。好吧,在我的情况下,这似乎不是真的,因为它没有遗漏任何“}”。我甚至尝试在结尾添加一个额外的“}”,但它仍然说同样的话。因此,只有当我将另一个“}”直接放在“{”后面时,它才会清除错误

void OnApplicationQuit()
这没有任何意义。但当我这样做时,它会在

OnApplicationQuit()的void
(具体来说,是
OnApplicationQuit()的
OnApplicationQuit()
的开头)我不能对那个名称空间使用方法或函数,我不知道这是什么意思,我认为这不是真的。我相信第二个错误是因为我必须在applicationquit()上放置
void{}
。这里发生了什么?我该如何修复它?另一件事:我在研究了如何做之后构建了我的保存/加载脚本,但代码如何知道我何时收集密钥卡1?我是否必须在密钥卡1中创建一个脚本,在我收集密钥卡时告诉保存/加载脚本?这是否会导致我不得不添加更多的脚本保存/加载脚本中的pts来检测keycard1脚本,告诉保存/加载脚本我捡到了它?我对Unity的整个C#部分还是新手,我完全是自学成才的。你看,我刚刚开始做我的第一个严肃项目。所以我需要知道我的保存/加载脚本中用于调用s的保存和加载例程到底是什么ave和load;因为我需要制作一个带有按钮的菜单屏幕,当按下按钮时,调用保存或加载例程。因此,当我按下保存或加载按钮时,看看我的脚本,脚本会知道我有钥匙卡吗,还是我必须手动将其放入脚本中?最后,当我获得钥匙卡2时,我如何制作一个调用save的脚本

真诚地

芥末

请不要抄袭

我向你保证我甚至不想^^


你的第二个片段应该做什么

在applicationquit()
上有一个方法声明
,在该方法中声明
公共静态
字段和其他方法

->所有这些在c#中都是不允许的

  • 应用程序quit()的方法
    OnApplicationQuit()
    应该位于类型
    monobhavior{…}
  • 然后你就不能在一个方法里面有访问修饰符,你只需要调用这个静态方法
    SaveLoad.Save()

你宁愿在你的场景中有一个类似的游戏对象

在此请注意,Unity中的每个组件都需要写入一个单独且同名的文件中。因此,在本例中,它应该位于
saveloadbehavior.cs
(其中
.cs
隐藏在Unity中)


实际上,您可能更愿意使用此选项,例如,通过这种方式,您根本不需要上述组件和游戏对象:

public class SaveLoad
{
    // will be automatically called on application start
    [RuntimeInitializeOnLoadMethod]
    private static void Init()
    {
        Load();
        // register a callback to the application quitting event
        Application.quitting += OnQuit;
    }

    // will be automatically called on application quit
    private static void OnQuit()
    {
        Save();
    }

    .... // Your load and save methods just the way you have them already

}

因此,
SaveLoad.Save();
我必须为“保存例程”做的所有事情都是如此。那么加载呢?另外,我该如何处理这个游戏对象才能使其保存?加载时,请调用
SaveLoad.Load()
。可能是在组件的
唤醒
启动
方法中。您只需将此游戏对象放入场景中,然后它就会自动与该场景一起加载。哇。我还以为会比这更难。非常感谢!所以我的保存/加载脚本充当了保存/加载序列的定义者而我所需要做的就是使用
公共类somethingsomethingsomethingsomethingsomethingsomeone:monobhavior
然后你展示的其他东西?…然后把它附加到,比如说,某个菜单中的“保存游戏”按钮上?哦,你指我附加的这个“游戏对象”;它应该是我的角色吗?1)StackOverflow是“一本打开的书”,当然你可以复制代码。但是,如果你真的了解这是如何工作的以及为什么工作的,我会更愿意;)…2)是的,根据
使用
语句,并将其附加到场景中的游戏对象上。但是正如在答案底部所说的,你甚至不需要不同的脚本或游戏对象但是你可以把它简单地放在你已经拥有的类中;)“我可以向你保证,
公共静态
字段和我使用的其他方法都很好”-不,它们不是。你应该总是避免使用可变的
静态
状态。另外,正如你自己写的:“我不是C#方面的专家”,所以你不能“保证”当你的程序目前明显错误时,请告诉我们它的正确性。@Dai好吧,好吧!如果这显然冒犯了你或是以任何方式侮辱了你,那我很抱歉。正确,我在
c#
上可能会说“低智能”,因为我是自学成才的,而且我有两周的时间自学。我所说的“我向你保证”它在Unity中工作得“非常好”,没有编译器错误或警告,所以它似乎没有引起任何麻烦。但是如果它只是效率低下,那么就说明它效率低下。就像lon一样
using UnityEngine;    // For Debug.Log, etc.
 
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
using System;
using System.Runtime.Serialization;
using System.Reflection;
// Made by Wasabi.

 void OnApplicationQuit()
 {
   public class SaveLoad {
 
     public static string currentFilePath = "SaveData.cjc";    
 
     public static void Save ()  // Overloaded
     {
       Save (currentFilePath);
     }
     public static void Save (string filePath)
     {
       SaveData data = new SaveData ();
 
       Stream stream = File.Open(filePath, 
  FileMode.Create);
       BinaryFormatter bformatter = new BinaryFormatter();
       bformatter.Binder = new 
  VersionDeserializationBinder(); 
       bformatter.Serialize(stream, data);
       stream.Close();
     }
   }
 }
public class SaveLoadBehavior : MonoBehaviour
{
     private void Awake ()
     {
         SaveLoad.Load();
     }

     void OnApplicationQuit()
     {
         SaveLoad.Save();
     }
}
public class SaveLoad
{
    // will be automatically called on application start
    [RuntimeInitializeOnLoadMethod]
    private static void Init()
    {
        Load();
        // register a callback to the application quitting event
        Application.quitting += OnQuit;
    }

    // will be automatically called on application quit
    private static void OnQuit()
    {
        Save();
    }

    .... // Your load and save methods just the way you have them already

}