クラフトゲーム開発(建築したクラフト台でクラフトするあたり)
継続を目標に開発していきます。何かしら実装が進めばオッケーくらいの気分でいきます。
今回は、今までは Physics2D.RayCast() でカーソルの先にある建物の GameObject を取得していたのを建物は Tilemap の仕組みで描画するようにしたので、そのあたりを修正していきます。
カーソルがフォーカスしている建物を取得する
建物として描画したタイルの情報を Dictionary<Vecotr2Int, Structures.Names> で管理しておいて、マウス位置を渡して取得するようにします。そして、たくさん修正をしてクラフトできる建物の上で右クリックしたときにクラフト用のパネルが動作するようにしました。
↓焚き火を右クリックしたときに表示されるクラフトパネル
クラフトパネルが開いたのは大変よいのですが、本来は焚き火で作れるステーキが表示されてほしいので見直していきます。
クラフトパネルが開かれたときの処理を実装する
実装を確認したところ、クラフトパネルが右クリックされたら木材加工用のワークベンチが開かれるようハードコーディングされていたので、フォーカス中の建物のパネルが開かれるように修正しました。
↓焚き火のクラフトパネルが開かれるようになったもの
大変よいと思います。
そして、このクラフトパネルのステーキをクリックすると、ちゃんとステーキが生成されました。
↓クラフトされたステーキがインベントリにある様子
まだ変換元素材のチェックは未実装なので、無からステーキがクラフトされていますがオッケーです。
まとめと今後の予定
今回の実装で、クラフト系の建物を配置して、その配置した建物でクラフトできるようになりました。大変よいです。
あと、ここまで動作させて「燃料」の概念を検討してないのに気付きました。ただ、必須ではないので燃料の概念はまたいつか実装します。
このゲームは「素材をプレイヤーが集めてくる」「仲間の NPC が素材を加工したり、農業して集落を運営する」「ときどき敵が攻めてくるので集落を防衛する」というゲームにしたいので、次回はそのあたりの仕様を書き出して確認していこうと思います。がんばります。