Unity 通过XML保存场景物体信息

Unity提取场景中的静态文本 有些单机项目开发的时候没有做本地文本配置文件,全部写死在场景的对象上面,简单记录一下怎么提取场景里面的文本并且写入到配置文件里面。 阅读详情

在项目工程中,将此脚本放置Editor文件夹中即可,在菜单栏中可以使用该命令导出场景信息内容保存为xml,文件存储到StreamingAssets文件夹中。

using System.IO;
using System.Xml;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;

public class ExportSceneInfoToXML : Editor
{

    [MenuItem("Tool/ExportSceneInfoToXML")]
    static void ExportXML()
    {
        string filepath = Application.streamingAssetsPath + @"/sceneInfoXML.xml";
        if (File.Exists(filepath))
        {
            File.Delete(filepath);
        }
        XmlDocument xmlDoc = new XmlDocument();
        XmlElement root = xmlDoc.CreateElement("scenes");
        //遍历所有的游戏场景
        foreach (UnityEditor.EditorBuildSettingsScene s in UnityEditor.EditorBuildSettings.scenes)
        {
            //当关卡启用
            if (s.enabled)
            {
                //得到当前场景的名称
                string name = s.path;
                //打开这个场景
                EditorSceneManager.OpenScene(name);
                XmlElement scene = xmlDoc.CreateElement("scene");
                scene.SetAttribute("name", name);
                foreach (GameObject obj in Object.FindObjectsOfType(typeof(GameObject)))
                {
                    //因为场景内物体都制作为prefab,所以只需遍历父物体而无需遍历子物体(prefab已包含子物体的信息)
                    if (obj.transform.parent == null)
                    {
                        XmlElement gameObject = xmlDoc.CreateElement("gameObject");
                        gameObject.SetAttribute("name", obj.name);
                        gameObject.SetAttribute("asset", obj.name + ".prefab");
                        XmlElement transform = xmlDoc.CreateElement("transform");

                        XmlElement position = xmlDoc.CreateElement("position");
                        XmlElement position_x = xmlDoc.CreateElement("x");
                        position_x.InnerText = obj.transform.position.x + "";
                        XmlElement position_y = xmlDoc.CreateElement("y");
                        position_y.InnerText = obj.transform.position.y + "";
                        XmlElement position_z = xmlDoc.CreateElement("z");
                        position_z.InnerText = obj.transform.position.z + "";
                        position.AppendChild(position_x);
                        position.AppendChild(position_y);
                        position.AppendChild(position_z);

                        XmlElement rotation = xmlDoc.CreateElement("rotation");
                        XmlElement rotation_x = xmlDoc.CreateElement("x");
                        rotation_x.InnerText = obj.transform.rotation.eulerAngles.x + "";
                        XmlElement rotation_y = xmlDoc.CreateElement("y");
                        rotation_y.InnerText = obj.transform.rotation.eulerAngles.y + "";
                        XmlElement rotation_z = xmlDoc.CreateElement("z");
                        rotation_z.InnerText = obj.transform.rotation.eulerAngles.z + "";
                        rotation.AppendChild(rotation_x);
                        rotation.AppendChild(rotation_y);
                        rotation.AppendChild(rotation_z);

                        XmlElement scale = xmlDoc.CreateElement("scale");
                        XmlElement scale_x = xmlDoc.CreateElement("x");
                        scale_x.InnerText = obj.transform.localScale.x + "";
                        XmlElement scale_y = xmlDoc.CreateElement("y");
                        scale_y.InnerText = obj.transform.localScale.y + "";
                        XmlElement scale_z = xmlDoc.CreateElement("z");
                        scale_z.InnerText = obj.transform.localScale.z + "";
                        scale.AppendChild(scale_x);
                        scale.AppendChild(scale_y);
                        scale.AppendChild(scale_z);

                        transform.AppendChild(position);
                        transform.AppendChild(rotation);
                        transform.AppendChild(scale);

                        gameObject.AppendChild(transform);
                        scene.AppendChild(gameObject);
                        root.AppendChild(scene);
                        xmlDoc.AppendChild(root);
                        xmlDoc.Save(filepath);

                    }
                }
            }
        }
        //刷新Project视图, 不然需要手动刷新哦
        AssetDatabase.Refresh();
        Debug.Log("保存完成:" + filepath);
    }



}

Unity之ink.xml文件 通过使用link.xml文件中的这些扩展属性,开发者可以更灵活地控制 Unity 项目的代码剥离行为。和属性可以帮助开发者在处理缺失程序集和引用关系时避免不必要的剥离,而属性则确保 Windows 运行时程序集中的重要类型和方法不会被剥离。这些功能对于优化构建过程、提高应用程序的稳定性和性能至关重要。合理使用这些属性,可以帮助开发者在构建过程中更好地管理代码和资源。使用link.xml文件可以有效地管理 Unity 项目中的代码剥离,确保在特定场景下所需的代码不会被意外删除。 阅读详情

相关推荐

【Unity】随机生成物体并显示其信息

本文介绍用Unity脚本随机生成物体并用OnGUI显示物体的状态

CiNian_的博客 6944

Unity获取所有场景的名字

Unity获取所有场景的名字

a451319296的博客 1500

【Unity3D日常开发】Unity3D中使用数据类保存数据,持久保存数据、数据存放在、跨场景调用数据类

推荐阅读 优快云主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 我发现还有很多小伙伴对于数据的保存很疑惑,不知道怎么保存数据,也不知道跨场景的数据怎么保存。 Unity的数据的持久化主要有以下几种方式: 使用PlayerPrefs类,进行数据持久化 使用数据类保存数据 使用本地文件保存数据,比如Json、XML、TXT 使用服务器获取.

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 7687

【自己看的笔记】Unity基础操作认识

1.创建工程 右上角layout更改布局 2.布局 5个主要窗口 更多窗口在window里面 Project:工程面板:工程的资源(声音图片等) Hierarchy:层级面板/显示当前场景下有哪些东西 Inspector:属性面板/检视面板(当选择hierarchy里面的物体时会显示其相应的属性) 3.什么是场景? File:创建新场景(记得按command+s保存,存在assets里面,assets里面建一个scenes文件夹,把刚刚保存的场景移进去) 在hierarchy右键创建

m0_62776570的博客 5411

Unity3D之游戏场景的切换与持久化简单数据的储存

Unity3D之游戏场景的切换与持久化简单数据的储存,Unity最新的场景切换形式,以及实现PlayerPrefs数据的保存与读取。

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

【摘要】本文主要分享自学阿里云大模型高级工程师 ACP 认证中《2.8 部署模型》的学习笔记。详细介绍学习目标、梳理涵盖的知识点并评估其重要性和难易度,对既重要又困难的知识点进行重点分析,旨在为对阿里云大模型学习和认证感兴趣的读者提供学习思路和经验参考。

davidkorhenn的博客 2060

unity简单理解保存场景和载入场景

转载:https://blog.youkuaiyun.com/kmyhy/article/details/78643293 目录概念Player Prefs利用BinaryFormatter保存数据和json格式保存数据 概念 在 Unity 中关于保存,有 4 个关键的概念: PlayerPrefs: 这是一个特殊的缓存系统,在两次游戏过程中为玩家保存简单设定。许多新手程序员误以为他们能够用它来保存游戏存档,但这不是什么好的做法。它只允许你保存简单的东西,比如图形声音设置、登录信息或者其它基本的用户相关的数据。 序列

weixin_44453949的博客 2727

Windows下构建ImGui.Net

工具 Visual Studio 2017 操作 下载项目 git clone https://github.com/mellinoe/ImGui.NET.git 编译 右键以下两个项目并调试: ImGui.NET.SampleProgram ImGui.NET.SampleProgram.XNA Error fix 中间遇到一些问题: SDK版本不对 去微软官网下载安装对应版本 由于设置了代理被远程服务器拒绝连接 关闭代理(也许在环境变量中) nuget源无对应资源,404 NOT FOUN

jojozym的博客 1486

Unity利用Xml和Json保存场景

之前已经简单介绍了XML和JSON的基本使用方法。这里我就介绍一个例子来对XML和JSON进行实战应用 --------- 场景的保存和热更。 提前Ps :   所讲工程内容最后都会给出源码地址。 1.首先你得有一个场景。这个迷宫地形我搭了好久。。 可以看到地图中有个环境Env,人物Player,灯光Light,UGUI事件系统EventSystem,画布Canvas。Ini

YzlCoder的记事本 9787

智慧矿山无人机空地一体化解决方案

未来,随着技术的不断进步和应用场景的不断拓展,智慧矿山无人机空地一体化解决方案将在矿业领域发挥更加重要的作用,为矿山的可持续发展提供更加有力的保障。该系统能够实现矿山的全方位、全天候监测与管理,提升矿山生产效率,降低安全风险,并为矿山的可持续发展提供有力支持。智慧矿山无人机空地一体化解决方案是当前矿业领域技术创新的重要方向,旨在通过集成无人机技术、物联网、大数据、人工智能等先进技术,实现矿山的智能化、高效化和安全化运营。在矿山爆破、挖掘等危险作业中,无人机可进行远程监控和指挥,降低人员安全风险。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1109

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1919

Unity解析XML

常用的API如下:1.tt.GetAttribute(“name”)) ​2. XmlNode provinces = xmlDoc.SelectSingleNode(“xuhaitao”); ​3.xmlDoc.SelectSingleNode(“xuhaitao”); ​4.XmlDocument doc = new XmlDocument(); ​ ​5.xmlDoc.Load(fil

海涛高软 3088

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

unity 多物体标签_关于保存多个同样标签游戏物体位置的脚本,大家帮我看看

该楼层疑似违规已被系统折叠隐藏此楼查看此楼#pragma strictimport System; import System.Xml;import System.Xml.Serialization;import System.IO;import System.Text;class DemoDatas2{var levelscount : int;var money : int;var name...

weixin_34237941的博客 321

OpenCV简单应用:图像模糊处理

OpenCV是一个广泛使用的开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法。本文将介绍如何使用OpenCV对图像进行模糊处理,并提供相应的源代码。该函数接受两个参数:第一个参数是输入图像,第二个参数是指定模糊核大小的元组。在这个例子中,我们使用了一个5x5的模糊核。您可以尝试不同大小的模糊核,以获得不同程度的模糊效果。函数和指定不同大小的模糊核,我们可以实现不同程度的模糊效果。该函数接受两个参数:第一个参数是窗口的名称,第二个参数是要显示的图像。在上面的代码中,我们首先使用。要运行上述代码,请将。

MwgmPhilosophy的博客 288

基于mengzi-t5训练生成式模型

【代码】基于mengzi-t5训练生成式模型。

开卷有益 169

【转】Unity利用Xml和Json保存场景

原文:http://blog.youkuaiyun.com/y1196645376/article/details/525490821.首先你得有一个场景。这个迷宫地形我搭了好久。。可以看到地图中有个环境Env,人物Player,灯光Light,UGUI事件系统EventSystem,画布Canvas。Init不用管,先删掉。我们把这几个物品全部做成Prefab。我放在了Prefab的文件夹里面。值得注意的是...

qq_35503380的博客 492

MT4/MT5 第三代移动平均线(MetaTrader 指标)

第三代移动平均线(3G-MA)是传统MA指标的升级版本,通过"时滞压缩"算法将信号滞后降至理论极限(λ=2)。该指标在保留平滑性的同时,信号速度比EMA快1.5-2.3倍,适用于MT4/MT5平台。核心参数包括计算周期(默认34)、滞后压缩系数(2-10)和应用价位选择,支持斜率变色功能。安装简单,无需外部依赖,通过多周期共振可提升12-18%胜率。指标代码包含完整的MT4/MT5实现方案,采用双缓冲计算结构,通过相位前移算法抵消群延迟。风险提示:需配合其他技术指标和严格风控(≤2%账户

JanLEE 579

Unity 场景无法保存问题

某台机器 Unity 2019.3.0f6 项目场景无法保存,保存完仍为星号,Ctrl + S 也没有效果。 花了大量时间排查,重装 Unity 无效,重新 Clone 工程文件也无效。 最后在 Edit > Preferences 打开 General 标签页,把 Verify Saving Assets 去掉即可。 这是与工程相关的本地设置。 实际上这是开启保存资源的提示窗口功能(如下图)。 不知为何,窗口没有弹出,于是就出现了这种无法保存场景的情况。 ...

西河某人的博客 8922

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Unity如何保存场景,如何导出工程文件/如何查看保存位置?【各版本通用】

Unity如何保存场景,如何导出工程文件,查看保存位置

嗯哈 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

unity 保存场景数据,读取场景

一共两个脚本 一个保存的,一个读取的,下面会附上代码,网上都有,这个只是方便自己用, 这是保存的脚本,放到Editor文件夹下即可 using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using UnityEditor; using...

weixin_30667301的博客 4018

Unity自动保存场景

1,根据InitializeOnLoad属性,放在类前,声明静态构造函数,即可在编辑器启动时调用该静态构造函数 2,UnityEditor.EditorApplication.update委托可以在编辑器下实现运行时的Update 3, EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene());保存场景 实现: using UnityEngine; using UnityEditor; using UnityEditor.Scene

weixin_44806700的博客 5182

unity设置并保存物品栏中物体信息

unity设置并保存物品栏中物体信息

lucky_XiaoZhang的博客 872

unity运行状态下保存物体至资源文件夹内

参考链接:https://blog.youkuaiyun.com/tom_221x/article/details/61920213 Unity运行时,动态创建的Mesh挂载到MeshFilter组件上,并不能保存到本地Prefab文件里。在运行的场景里,拖拽正确配置的MeshFilter对象到Unity资源管理器。生成的Prefab文件,里面的Mesh对象会missing。所以,我们需要在运行状态,导出Mesh到本地生成一个obj模型文件。 原理,就是根据obj文件的属性,把运行时Mesh的顶点,索引,贴图数.

qq_40795166的博客 4490

【Unity】Xml的加密读取保存

Unity中通过xml格式保存游戏数据是非常常见的,但是如果不进行加密则非常容易被别人在外部通过修改xml文件修改游戏数据,因此加密xml是非常必要的。

凡心所向,素履以往 1236
上一篇: Unity 使用代码切换天空盒
下一篇: C# 判断输入的字符串内容是否符合ip地址格式
爱尚游Bin
博客等级 码龄9年 86粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值