Unity Yaml文本标量处理
在做脱离unity处理unity的yaml文档的工具(prefab、material等)
unity使用的yaml是YAML的语法子集,主要难点在处理文本标量上,如果用工具修改以后和unity生成的格式不一致,实际应用价值就打折扣了,每次使用工具都会变来变去。
字符串类型
首先把字符串分成4种类型:
- 0 可能是数字,或者是单行的列表、字典,没什么好说的,都在一行内
- 1 不带引号,在yaml文档中出现的
换行符\n
+ - 2 带单引号,在yaml文档中出现的
''
需要转义成'
, 空格同上,换行符\n换行符\n
+ - 3 带双引号,在yaml文档中出现的
\n\r\t\"\uXXXX
对应转义,\n
+\
需要转成单个空格
判断字符串类型
一个字符串会自动生成什么类型,直接按照不会影响解析的原则来区分
0. 单行标量原封不动
- 存在非ascii字符或
\t
,直接3类型 - 存在
\n
,3类型 (单引号如果换行后带空格,缩进对不上了) - 存在
:
,2类型 (避免解析成key) - 存在
\n
,2类型 (无引号不能解析换行) - 以
:
,[
,{
,,
,'
, - 以
:
, - 简单判断下是不是数字,不是数字的1类型
字符串写YAML
设最大宽度_STRING_LINE_WIDTH
为80,带key的行,计算key的宽度(不算key后面:
的两个字符)
- 单行标量直接写
- 0类型直接写
- 1类型,不是空格的字符直接写;是空格,判断当前行非空格宽度<=_STRING_LINE_WIDTH, 继续写;否则如果是单个空格,写一个换行符,再写换行缩进,在下一行重复;如果是多个空格,不换行继续往后写
- 2类型,
'
转成''
, 空格逻辑和1类型一致,如果有换行符(n个连续,n>=1),写n个换行符,再写一个换行符,写空格缩进 - 3类型,符号转义,unicode字符转成
\uXXXX
。不是空格的字符直接写;是空格,判断当前行非空格宽度<=_STRING_LINE_WIDTH,继续写;否则如果是当个空格,写一个换行符,再写换行缩进;如果是多个空格,写一个换行符,写换行缩进,再写一个\
,再写n-1个空格
遇到问题再修改。YAML优势在于数据量小,但解析是真的难搞,unity罪大恶极。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构