Articles of 序列化

XNA的Monogame GameState管理不是非正常化

我正在做一些小游戏中的序列化/反序列化,我正在教自己的游戏。 基本上,我正在使用monogame(屏幕管理器等)常用的游戏状态管理资源。 然后我在OnDeactivated方法中序列化我的屏幕管理器组件和所有关联的屏幕: protected override void OnDeactivated(Object sender, EventArgs args) { foreach (GameplayScreen screen in mScreenManager.GetScreens()) { DataManager.SaveData(screen.Level.LevelData); } mScreenManager.SerializeState(); } 保存数据位是要做其他事情。 然后我重写OnActivated来序列化 protected override void OnActivated(Object sender, EventArgs args) { //System.Diagnostics.Debug.WriteLine("here activating"); mScreenManager.DeserializeState(); } 然而,当这运行它只是加载一个空白的屏幕 – 它进入游戏初始化和游戏绘制方法,但没有进入屏幕初始化或绘制方法。 我不知道为什么这可能是 – 任何帮助将不胜感激。 我不是唯一遇到这个问题的人 – 我也发现这个post – https://monogame.codeplex.com/discussions/391117

Unity3D C# – 访问编辑器上的自定义返回方法

我想知道是否有一种方法可以访问特定脚本上的方法,这些方法具有不同的签名,如OnClick UnityEvents在Inspector上接收(因为您只能访问公共隐私和无效返回的方法,仅以基本types数据作为参数字符),像这样的方法: public class DummyTree : BaseBehaviorTree { /// <summary>Method that can be accessed on Editor with UnityEvents. </summary> public void LuckyMethod() { Debug.Log("[Node] I can be accessed on Editor"); } /// <summary>Methdo that I would like to have access on Editor.</summary> /// <returns>Tree node State.</returns> public TreeNode.States DummyAction() { return TreeNode.States.Success; } } 这是为行为树的节点编辑器,我需要给每个节点一个TreeNode.States返回方法。 […]

统一和并行inheritance

我有以下几点: public class Item { [SerializeField]ItemData _data; public ItemData data { get { return _data; } } } public class Weapon : Item { [SerializeField]WeaponData _data; public WeaponData data { get { return _data; } } } public class ItemData : ScriptableObject { } public class WeaponData : ItemData { } 这似乎是一个很常见的设置,数据是从逻辑类分离 – 我可以使用单个脚本对象来定义大量的项目的统计。 但是,Unity给了我这个错误信息: […]

统一使用可序列化的数据所以它坚持通过场景

所以,我把所有的游戏数据都放到了一个包含所有需要保存的数据的大类中。 我想要做的就是能够在后面的场景中修改这些variables,并将它们保存到文件中(这样当玩家离开游戏并返回他的统计信息的时候是一样的)。这是我的课程。 public static GameNewSave GNS; // so to reference these variables , use GameNewSave.GNS.whatever public string PlayerName = " "; public int Education; public int money ; public int relationshipMom; public int relationshipDad; public int relationshipFriend1; public int relationshipFriend2; public int relationshipFriend3; public int relationshipPrinciple; public GameObject panel; public GameObject NoDataPanel; public string sceneName […]

C ++格式化序列化

我已经决定是时候在我简单的引擎中实现序列化了,但是这在过去的几天/星期里给我造成了很多麻烦。 我的引擎使用类似于T = Machine博客中描述的基于实体/组件的方法。 为了简单起见,我的第一个目标是实现实体的序列化。 由于我将使用Lua进行脚本编写,因此我认为将实体序列化为Lua表格会很好。 不幸的是,我发现在C ++中序列化的信息相当稀less。 经过多天的思考,我发现了一个方法,正在为我的实现工作, 这里描述。 本质上,我有一个EntityManager类,我从中请求新的实体。 这个类包含实体以及所有组件派生的BaseComponenttypes的指针。 因为我将组件存储为基本指针,所以我不能使用朋友类进行序列化,但必须使BaseComponent从具有纯虚拟序列化方法的Serializable类inheritance。 所以,这不是那么糟糕,我只需要从Serializable类inheritance并实现序列化方法。 为了支持反序列化,我必须根据最后一个链接做一些技巧。 也就是说,我必须在每个组件中包含一个静态对象,其唯一目的是从组件名称到构造函数填充映射。 这是一个通用的例子(请忽略任何可能的错误), /* Base.h */ struct Base: public Serializeable{ static std::map&ltstd::string, std::function&ltBase*(void)> > deriveds; virtual ~Base(void){} }; /* Derived.h */ template&ltclass T> struct add_map_entry{ explicit add_map_entry(std::string name){ Base::deriveds[name] = [](void) -> Base* { return new T; }; } } class […]

从标识符创建实体(C#)

我正在用C#/ XNA编写游戏。 通常,在游戏引擎中有这样的function是很有用的: Entity CreateEntity(string id, Vector3 location) { … } 所以,例如,你可以做这样的事情: List<string> entitiesToSpawn = { "Tree", "Bird", "Flower", … } foreach (string entity in entitiesToSpawn) { CreateEntitiy(entity, location); } 否则,您可以轻松地将ID存储在数据文件中,或者使用它们填充通用的GUI元素。 你认为什么是以可扩展的方式实现CreateEntity的最好方法,并保留这种接口? 现在,我有一个巨大的静态转换声明,显然是不可持续的。 也许我可以创建一个大function的string静态地图? 还是有更简单的方法从我的引擎中获得这种function?

代码与configuration在Unity

我在这一点上知道一个或两个关于统一,但我仍然有很多主观,最佳实践的问题,如:如何决定通过开始/唤醒初始化获得什么值,以及哪些值明确序列化到现场? 在我目前的项目中,游戏对象和行为在一个复杂的图中互相引用。 最初,我在Start()上做了这个,用编程方式,有很多的raycast和GetComponent <>()等等。 现在,我只是宣布的东西公开(违反封装?),只是简单地序列化这个信息,一旦由编辑脚本生成的场景…哪个更正确? 我的方法应该是什么可以序列化的序列化? 还是写更多的初始化代码来传达一些解释为什么这些值是他们是什么?

更新XML文档以匹配新的保存数据?

问题 我正在开发一个游戏,并使用XmlSerializer来存储一些用户数据。 虽然这不是一个直接的问题,但我正试图将如何将更新保存数据更新到我的游戏的更新版本时会发生什么情况。 由于XmlSerializer读取types,如果我用更多的variables更新我的类,保存文件变得不可读。 在做了一些研究之后,我发现了XmlDocument类 ,它能够读取这种types的XML文件。 这允许存储的数据是任意的,从而允许我相应地读取和写入数据。 有什么令我困惑的是我怎么会这样做。 有一个简单的方法来填充一个自定义类的节点/元素的XmlDocument? 我怎样才能检测到数据丢失,需要添加到XML文件? 例 如果你对这个问题感到困惑,下面是我想要完成的一个简单例子: <FileData version="Original File"> <foo>14</foo> </FileData> 几个版本后,我更新我的类看起来像这样: class FileData { var foo = 14; var bar = 4; } 现在,我需要XML文件看起来像这样,才可以使用XmlSerializer: <FileData version="Updated File"> <foo>14</foo> <bar>4</bar> </FileData>

在Unity中的GameObject的二进制序列化?

我想使用C#的二进制序列化序列化一个游戏对象 (与儿童和纹理)。 它适用于许多数据types,但不适用于GameObject 。 在文档中说它应该是可序列化的( http://docs.unity3d.com/ScriptReference/SerializeField.html ): 可序列化的types是: – 从UnityEngine.Objectinheritance的所有类,例如GameObject …. 我已经阅读了使用UnitySerialization资源的建议,但是这对我来说太过分了,我只需要在我的场景中存储一个GameObject (这将由许多用户生成),并将它们全部加载到另一个场景中。 这是代码(我正在学习本教程: http : //www.youtube.com/watch?v= J6FfcJpbPXE&feature= player_embedded ) using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class GameControl : MonoBehaviour { public static GameControl control; public GameObject drawing; public string drawName; void Awake () { if (control == null) { […]

使用JsonUtility.ToJson转换为JSONstring

我正在转换和显示与统一的JSONstring。 我已经完成了它的编码 using UnityEngine; using System.Collections; using LitJson; using SimpleJSON; using System.IO; public class TestDelete : MonoBehaviour { JsonData json; void Start() { Data2 data = new Data2(); Payload2 data2 = new Payload2(); data.command = "state"; data.payload = new Payload2() { text = "wwwwwww", image = "hello" }; data2.option = new Option () { A1 […]