场景数据类:

/// <summary>
/// 关卡数据
/// </summary>
public class LevelData
{
    //关卡名称
    public string levelName;
    //物体列表
    public List<DataType> objectsToData = new List< DataType>();
 
    public void AddObj(string prefabName, GameObject obj)
    {
        DataType data = new DataType(prefabName, obj.transform.position, obj.transform.eulerAngles, obj.transform.localScale);
        objectsToData.Add(data);
    }
}
 
/// <summary>
/// 物体数据,pos,rot,scale
/// </summary>
public class DataType
{
    public string prefabName;
 
    public float posX;
    public float posY;
    public float posZ;
    public float rotX;
    public float rotY;
    public float rotZ;
    public float scaleX;
    public float scaleY;
    public float scaleZ;
 
    public DataType()
    {
    }
 
    public DataType( string name, Vector3 position, Vector3 rotation, Vector3 scale)
    {
        prefabName = name;
 
        posX = position.x;
        posY = position.y;
        posZ = position.z;
        rotX = rotation.x;
        rotY = rotation.y;
        rotZ = rotation.z;
        scaleX = scale.x;
        scaleY = scale.y;
        scaleZ = scale.z;
    }
 
    public Vector3 GetPos()
    {
        return new Vector3(posX, posY, posZ);
    }
 
    public Vector3 GetRotation()
    {
        return new Vector3(rotX, rotY, rotZ);
    }
 
    public Vector3 GetScale()
    {
        return new Vector3(scaleX, scaleY, scaleZ);
    }

}
序列化场景物体:
public class SerializeScene : ScriptableWizard
{
    string assetPath;
 
    [MenuItem("Tools/Serialize Scene")]
    static void SerializeOpenScene()
    {
        SerializeScene ss = (SerializeScene)ScriptableWizard .DisplayWizard("Serialize Scene", typeof(SerializeScene ));
    }
 
    void OnWizardCreate()
    {
        // Get the path we'll use to write our assets:
        assetPath = Application.dataPath + "/Resources/" + "SceneInfo/" ;
 
        // Create the folder that will hold our assets:
        if (! Directory.Exists(assetPath))
        {
            Directory.CreateDirectory(assetPath);
        }
 
        FindAssets();
 
        // Make sure the new assets are (re-)imported:
        AssetDatabase.Refresh();
    }
 
    private void FindAssets()
    {
        List< GameObject> objList = new List <GameObject >();
        LevelData newLevel = new LevelData();
 
        newLevel.levelName = SceneManager.GetActiveScene().name;
        GameObject parent = GameObject .Find( "ObjectRoot" );
        if (parent == null)
        {
            Debug.LogError( "No ObjectRoot Node!");
            return;
        }
 
        foreach ( Transform trans in parent.transform)
        {
            Debug.Log(trans.name);
            AddObjects(trans.name, trans.gameObject, ref newLevel);
        }
 
        string json = JsonFx.Json. JsonWriter.Serialize(newLevel);
 
        FileInfo file = new FileInfo(assetPath + newLevel.levelName + ".txt");
        try
        {
            file.Delete();
        }
        catch (System.IO. IOException e)
        {
 
            Debug.Log(e.Message);
        }
 
        FileStream fs = new FileStream (assetPath + newLevel.levelName + ".txt", FileMode.OpenOrCreate, FileAccess .Write);
        StreamWriter sw = new StreamWriter (fs);
        sw.Write(json);
        sw.Close();
        fs.Close();
    }
 
    private void AddObjects( string prefabName, GameObject obj, ref LevelData level)
    {
        if ( PrefabType.PrefabInstance == PrefabUtility .GetPrefabType(obj))
        {
            level.AddObj(prefabName, obj);
        }
        else
        {
            Debug.Log( "Not a Prefab!");
        }
    }
}
序列化场景物体之前需要将ObjectRoot节点下的物体存为prefab,再到菜单中选择Tools-->Serialize Scene,在弹出的界面中点击create按钮即可生成当前场景的Json文件。
插件链接: http://pan.baidu.com/s/1jIgzRyY 密码: djqt
JsonFX GitHub:https://github.com/jsonfx/jsonfx
参考:1.http://www.cnblogs.com/sifenkesi/p/3597106.html
   2.http://zaxisgames.blogspot.com/2012/01/minimizing-build-size-in-unity-games.html

转载于:https://www.cnblogs.com/Sakya00/p/5558394.html

Unity—JsonFx序列化场景相关推荐

  1. Unity中的场景切换

    Unity中的场景切换 与电影类似,一个游戏往往需要多个场景.而如果场景中资源较少,那么可以很快的完成切换,如果较多的话,可能需要十几秒时间.在这段时间内播放加载动画等等,可以减少玩家的不耐烦. 同步 ...

  2. Unity实现跨场景的传送门

    Unity实现跨场景的传送门 目录 Unity实现跨场景的传送门 引言 视频效果 具体实现 门 数据 场景异步加载 关于门的特效 引言 之前写过一篇文章--<Unity第一人称可视化传送门制作& ...

  3. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  4. 观看unity自制vr场景_观看VR

    观看unity自制vr场景 A fun game experience is something that players want to show off, record, and share. W ...

  5. Unity最佳实践-场景照明

    Unity最佳实践-场景照明 英文原文:https://unity3d.com/cn/learn/tutorials/topics/best-practices/auto-generate-and-g ...

  6. unity的vr场景怎么做_如何用Unity快速创建一个VR体验

    文章相关引用及参考:uxdesign 不断试验Unity3D,探索Asset Store,并尝试创建出令人称奇的体验. (映维网 2017年08月25日)我(Andrew Coyle)一直希望为虚拟现 ...

  7. 【Unity入门】场景、游戏物体和组件的概念

    版权声明:本文为博主原创文章,转载请注明出处. 游戏和电影一样,是通过每一个镜头的串联来实现的,而这样的镜头我们称之为"场景".一个游戏一般包含一个到多个场景,这些场景里面实现了不 ...

  8. unity 模拟水下场景 水下冒泡

    参考博文https://blog.csdn.net/u010989951/article/details/52768794 unity版本5.4(项目源码百度云 链接:https://pan.baid ...

  9. Unity将当前场景渲染到图片上并导出图片(本地/服务器)

    在Unity中,可以使用以下代码将场景渲染为一张图片: // 创建一个RenderTexture作为渲染目标RenderTexture rt = new RenderTexture(Screen.wi ...

最新文章

  1. Microbiome:生态中心张丽梅组-植物发育时期驱动玉米微生物组生态角色的分化...
  2. python高斯分布训练_Python画图高斯分布的示例
  3. 《对不队》团队项目用户验收评审
  4. dockerfile 安装mysql_dockerfile构建mysql镜像
  5. 查询没有走索引_MySQL 如何正确的使用索引
  6. spring整合redis问题
  7. VSFTP安装配置总结
  8. wust2012级软件工程新生经验交流会草稿
  9. 微信支付宝个人免签约即时到帐接口开发附demo
  10. C语言单片机把2000H清零,清零程序实验报告.doc
  11. 【SSM分布式架构电商项目-14】后台CMS内容管理系统管理前台首页广告
  12. NISP和CISP考试通过率怎样?
  13. Finclip小程序宿主环境与微信小程序宿主环境
  14. 为什么说java是一个纯粹的面向对象的语言?面向对象语言和面向对象编程
  15. python大全-iwanna
  16. 机器学习中的特征重要性 Feature Importance
  17. C语言例题理解(小写字母转换成大写字母,兔子生兔子问题,求100以内勾股数,整数逆序输出)
  18. hfish蜜罐搭建及简单使用
  19. 新装的linux设置root密码
  20. 聊一聊KOA的洋葱模型

热门文章

  1. 2020下半年,最接地气的字节跳动Android面经分享(已收offer
  2. uniapp 微信分享(ios)
  3. h5怎么获取微信用户openId,h5如何获取微信用户openId
  4. 如何解决QQ能上网,但是浏览器无法联网的问题
  5. Topcoder Open 2011 Qualification Round 3报告
  6. 数据结构实验+理解1 基于c++的二叉树函数实现
  7. DICOM:fo-dicom、dcm4che14、dcm4chee等开源库持续自我维护
  8. 2019年了,中国汽车行业还有多少黑洞?
  9. Fragment+RadioButton实现点击切换页面效果
  10. 日期 时间格式转换 时间过滤器 moment