はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】「UnityYAMLを紐解く!Unityを使わない自動化のすゝめ」という内容で登壇しました

はじめに

Unity エディタ拡張 完全に理解した勉強会で「UnityYAMLを紐解く!Unityを使わない自動化のすゝめ」という内容で登壇をしました。
Unity エディタ拡張完全に理解した 勉強会 - connpass

発表資料をブログでも載せておくのと、この記事ではちょっとコメント追加しようと思います。

発表資料

www.docswell.com

YAMLのParserについて

発表だと話せなかったですが、yamlをパースするためにC#だとYamlDotNetVYAMLあたりを使うのが定番かなと思っています。
github.com
github.com

fileIDが結構厄介でして、巷に出回っているYAML Parserだと割とエラーになってしまったりします。

--- !u!1 &7630707805310133161
GameObject:

私はVYAMLをよく利用しているのですが、エラーは出ないもののおそらくfileIDを読み込む手段がない可能性が高いです。(私が見落としているだけかもしれません)

var objects = YamlSerializer.DeserializeMultipleDocuments<dynamic>(yaml);

GitHub - hadashiA/VYaml: The extra fast, low memory footprint YAML library for C#, focued on .NET and Unity.

どう対応するかというと、fileIDプロパティ名 : 値として前処理で置き換えてしまうという荒技で私は解決しました。プロパティ名が競合する可能性などもありますし正直あまり良い方法ではないとは思います。

またVYAMLはデシリアライズ際にフォーマットが維持されない(もしかしたら手法あるかも?)ようでして、それも手こずりました。

Pythonを利用する方法

Pythonで作成されたunity-yaml-parserというOSSがありまして、これを使うのも手です。
github.com

こちらはちゃんとフォーマットが維持されるようです。とても有用なのですが、強いていうならPythonなのがネックですね...。

さいごに

フォーマットを維持しながらアセット読み書きができ、参照先も簡単に追えるようなUnityに特化したC#のOSSをとても求めています。そこら辺自作もしてみたいなと思いつつも、果たして私で作り切れるのだろうか...と考えたりしてます。

あとCI/CDでの実例ももう少し細かく実装含め紹介したい気持ちもあり、そこら辺をまとめた記事を後で書こうかなとか思っています。