はじめに
Unity エディタ拡張 完全に理解した勉強会で「UnityYAMLを紐解く!Unityを使わない自動化のすゝめ」という内容で登壇をしました。
Unity エディタ拡張完全に理解した 勉強会 - connpass
発表資料をブログでも載せておくのと、この記事ではちょっとコメント追加しようと思います。
発表資料
YAMLのParserについて
発表だと話せなかったですが、yamlをパースするためにC#だとYamlDotNet
やVYAML
あたりを使うのが定番かなと思っています。
github.com
github.com
fileID
が結構厄介でして、巷に出回っているYAML Parserだと割とエラーになってしまったりします。
--- !u!1 &7630707805310133161 GameObject:
私はVYAMLをよく利用しているのですが、エラーは出ないもののおそらくfileID
を読み込む手段がない可能性が高いです。(私が見落としているだけかもしれません)
var objects = YamlSerializer.DeserializeMultipleDocuments<dynamic>(yaml);
どう対応するかというと、fileID
をプロパティ名 : 値
として前処理で置き換えてしまうという荒技で私は解決しました。プロパティ名が競合する可能性などもありますし正直あまり良い方法ではないとは思います。
またVYAMLはデシリアライズ際にフォーマットが維持されない(もしかしたら手法あるかも?)ようでして、それも手こずりました。
Pythonを利用する方法
Pythonで作成されたunity-yaml-parser
というOSSがありまして、これを使うのも手です。
github.com
こちらはちゃんとフォーマットが維持されるようです。とても有用なのですが、強いていうならPythonなのがネックですね...。
さいごに
フォーマットを維持しながらアセット読み書きができ、参照先も簡単に追えるようなUnityに特化したC#のOSSをとても求めています。そこら辺自作もしてみたいなと思いつつも、果たして私で作り切れるのだろうか...と考えたりしてます。
あとCI/CDでの実例ももう少し細かく実装含め紹介したい気持ちもあり、そこら辺をまとめた記事を後で書こうかなとか思っています。