NPC をコーディングして領地経営するゲーム開発(Python 対応: NPC 制御まわり)
前回の作業で、TCP/IP 通信について、よくわからない問題に直面して挫折しました。
とりあえず、Unity 終了時に呼ばれる OnApplicationQuit() に TCP/IP サーバを終了させる処理を追加して問題が出なくなったので開発継続していきます。
やったこと
Python スクリプトから NPC を制御するあたりを実装します。
必要な引数を JSON フォーマットで送る
Python スクリプト側からは、こんな感じでメソッドと引数とを JSON にして送信しています。
↓ character.py のメッセージを表示するメソッド say() の実装
これを受信するゲーム側の C# の実装は ↓こんな感じです。
サーバ側である C# でのデシリアライズには MiniJSON を使っています。
もろもろのエラー処理は未実装ですが、ここまでで受信したデータをサーバ側で実行してゲーム画面に反映させることができました。大変よいです。
↓ character.say() が実行されて NPC の上にセリフが表示されている様子
今のところ動作するのは say() だけですが、他のコマンドも順に実装していきます。
情報を取得する
Python 側からゲーム側に指示するタイプのメソッドは動作するようになりました。
残っている作業としてはゲーム側から必要な情報を受信するメソッドの実装です。
これは Python からのメソッド呼び出しに対してサーバ側から必要なデータを JSON フォーマットにして Python 側に送信しデシリアライズして処理する予定です。
これも、大筋では動作すると思うので順に実装していきます。
テストについて
これから Python のメソッドを実装していくわけですが、それが適切に動作するかや、既存の Lua メソッドが適切に動作するかをテストする仕組みがほしいと思っています。
正常系のテストはなんとかなりそうですが、異常系のテストをどうするかは決めてないので、しばらく考えてから作っていく予定です。
Python の場合は、エラー発生時に例外が発生するようにすることや、ゲーム内のコンソールに出力したエラーメッセージを取得する仕組みは必要かなと思っています。
まとめと今後の予定
とりあえず Python 対応の仕組みが動作するようになって大変よいです。
引き続きメソッドを追加していくのと、それのテストをどうするかの検討を進めます。
次回はこれら Python 対応をやるか、雑多なタスクか、ゲームのチュートリアルを誰向けに作るかとかを検討しようと思います。がんばります。