土屋つかさの技術ブログは今か無しか土屋つかさの技術ブログは今か無しか読者になる土屋つかさの技術ブログは今か無しか土屋つかさが主にプログラミングについて語るブログです。C#(以下、スクショのスケールやトリミングができてないんですが、面倒なのでいつかやるかも、くらい。あとごめん、コードは微妙に実際に使ったものと違うのでそのままでは動かないかも。これは後で確認します)司エンジン(土屋が開発しているコード注入式ステートマシンを特徴とするゲームスクリプトエンジン)をUnityに移植したいのですが、去年試した方法(ruby版と同じようにC#の内部スクリプトとして動作するようにする)は、正直上手く行く気がしませんでした(土屋のC#への理解不足もあるけど、そもそもアプローチが間違ってる気がする)。そんな中、あおたくさんと話していて「司エンジンの一番重要な部分はステートマシンを駆動させるASTであって、スクリプト言語自体ではない。ASTをUnityに移植して、コード注入式ステートマシンを動作させられるなら、それだけでも価値があるのではないか」という発想を得まして、今年はこのアプローチでやってみたいと思います(あと3か月で今年終わるけど)。ASTは外部からJSONで渡すことにして、とはいえJSONの操作とかしたことないので、しばらくUnity上でJSONを弄る演習をしてみたいと思います。neueccさんのUtf8Jsonです。C#で実装されたシリアライザとしては最速とのこと(今回は速度を重視しているわけではありませんが)。Unity)http://neue.cc/2017/09/29_559.htmlちなみにUnityにはJsonUtitlityという高性能なJSONライブラリがあるのですが、これDictionaryが使えませんで、それだと今すぐに使う分には取り回しが面倒なので。最終的にDictionaryがなくても良くなるかもしれないし、JSONデシリアライザをカスタム実装する気もしているんですが、それまではこのスタイルで行きます。以下、Unityでの導入の手順をまとめました。今回のテストではUnity2018.1.6f1を使っています。実際の開発環境は2018.2なんですが、スクショを取ろうとした端末に入っていたUnityが古く、アップデートが面倒なのでしませんでした。大きくは変わりますまい......。Unity用のパッケージが用意されているので(ありがたい!)、GitHubのreleasesからUtf8Json.Unity.1.3.7.1.unitypackageをダウンロードします。Utf8Jsonhttps://github.com/neuecc/Utf8Json/releasesUnityで新規プロジェクトを作成し、unitypackageファイルをprojectにドラッグ&ドロップし、Importを選択すればライブラリがインポートされます。Unsafe対応この状態ですでにコンパイルエラーが出ており、Playが実行できません。「unsafeなコードを書くならオプション指定が必要だよー」と言っています。C#ではメモリを直接制御できるunsafeコンテキストという概念があり、utf8jsonはそれを使っているようですね。upのたびに微妙に変わるので注意)。シリアライズ(C#→JSON)まずはC#上のオブジェクトをJSONオブジェクトに変換(シリアライズと言います)してみます。utf8jsonのマニュアルのサンプルコードを流用していますが、マニュアルだと内容が異なるPersonクラスとMypersonクラスがあったり、Personクラスのアノテートが余計だったりして最小構成にならないので、若干弄ってます。Utf8Json;"を忘れないようにしましょう。実行すると以下のように、Person型pの中身がシリアライズされ、String型jsonに格納されました。お手軽!><デシリアライズ(JSON→C#)お次はJSON文字列を読み込んでC#オブジェクトに変換(デシアライズと言います)します。司AST対応としてはこっちが本番です。}}が、これはまたコンパイルエラーになります。Framework4.0でないと動作しないためです。Equivalent"に切り替えればOKです。切り替えるとUnityの再起動が要求されます。2017(Community)"を選択しておきます(環境によって表示される文言は変わります)。実行すると見事にJSON形式の文字列がjson2に格納され、それを連想検索で取得&格納できています。マニュアルまだ読んでない(!)のでこんなものでしょう。R3.Unit型について前回記事の補足です。PlayModeに入った時にOnValidate()が2回呼ばれるのか問題(その2...前回の記事の続きです。プロジェクト+VS2019環境でStyleCop.Analyzersを使用するために必...注意:この記事は古い物です。10サイト情報プリバシーポリシーはてなブログをはじめよう!t_tutiyaさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。