arketブログ

arket(アルケット)のblogです。 色々作ります。

グリッド移動処理実装やZenjectなど

散策フェーズ内ユニットのグリッド移動処理などを作成中。

グリッド内の移動は地味に操作性がこだわれそうな場所。
ローグライクゲームシミュレーションゲームのカーソル移動など、 既存のゲームでどういう動きがシックリきていたかを探りながら確認。

自分の要求仕様はこんな感じ

・1回の移動キー押下で1グリッド移動。
・但し連打は排除。
・n秒間移動キーを長押ししていたら連続グリッド移動。
・長押しを離すと連続移動終了。

この辺りの移動仕様は実に面倒くさい。
UniRxがなければキツい。

そしてDependency InjectionのZenjectを使い始めている。
単純なコンポーネントBinding程度でしか使っていないが、付属しているテストツールが結構良さげ。

github.com

ユニットテストに使うかと思います。
f:id:arket789:20171231152318j:plain

フロア配置用エディタ拡張など

散策フェーズをマス目(グリッド)移動の仕様に変えたので、
移動フロア配置用のマスターデータを残したいもの。
これもScriptableObjectで保存・利用したい。

というわけで、Hierarchyで設置したフロア配置についての情報をScriptableObjectに変換するUnityエディタ拡張を作っていた。

これで設置したフロア配置をScriptableObjectとしてエクスポートする。
UXとか微妙な部分もあるが個人利用するもので、エディタ拡張はゲーム本編そのものの開発ではないので程々に。

f:id:arket789:20171228103248j:plain


ScriptableObjectをエクスポート。
いや、配置したフロア用のObjectをPrefabとして保存すれば?
と思われそうだが、座標データ等をScriptableObjectとして変換し持つことで、ユニットを移動する処理の際に楽ができる。

f:id:arket789:20171228113103j:plain

散策フェーズの仕様変更など

クリスマスですが輝夜月ちゃんを摂取しながら開発中。

 

現在製作中のゲームでは幾つかのフェーズシーンをプレイしていく流れで、そのうちの一つが散策フェーズ。
散策フェーズでプレイヤーを操作して獲得したアイテム・イベント等を別のフェーズのリソースとして利用するイメージ。

プレイヤー操作は当初、3人称視点の自由移動でフィールド内のあちこちを探索してもらう仕様を考えていた。(クロックタワーやDetention風)

しかし、ゲームの肝がそこではないに関わらず、プレイが間延びしてしまう可能性がある点と開発リソースの辛みから、移動や画面仕様を変えることに。

新たな散策フェーズではフィールドがマス目状になり、移動コストの概念を導入。

その画面だけを見るとADVというよりはSLGのように見えるが、色々解決しそうなので良しとしよう。

文字だけで書いても分かり辛いので、近いうちに画面を載せたい。

イベント用マスターデータ管理

拙い手で3Dモデリングをしている傍ら、エディタなコードも書く。
イベント用のマスターデータを外部ファイルから取得してScriptableObjectとして管理する処理とか。

 

外部データの形式はjsonとかyamlとか考えたが、外部に翻訳を頼んだり等を考慮して昔ながらのcsvにした。(スプレッドシートから吐いてもらう)

イメージはこの記事にあるような管理にしたい・・・
といっても、ほとんど自分くらいしか使わない気もするので、時間をかける所ではない。程々に作る。

www.gamebusiness.jp

 

他にはこのイベントデータに紐付けた、複数のシナリオデータのような構成も作成予定。

セリフだけではなく、カメラ操作やNPCアクションといったオブジェクト操作も行いたいが、

Unityのお作法的にはどう作ったほうが良いのだろうか。


今のところ、舞台の脚本みたいなテキストデータをScripptableObject化して、

イベント発生時に順番に処理するような方法を考えている。