読者です 読者をやめる 読者になる 読者になる

赤宿 = Red Inn

素人の試行錯誤と2Dゲームプログラミング

Top

 桟橋が試行錯誤してゲームを作るブログ。素人の視点のため、記事の内容には要注意。

過去に作ったゲーム(ウディタ製)

  • 羊山ゴートの冒険  初めて完成したゲーム。ウディタではゲームの動作を直接記述できたため、ステート管理などの複雑なプログラミング技術がいらなかった。ウディタが無ければ今日の自分は無い、というのは僕だけではないはず。

  • ツギハギの行方  二作目。形にまとめて提出しただけ。ローグライクのシステムをRPGの演出に使う方向性を考えきれず、ADV(adventure)ということにした。

現在

What Decoupling is About

Stuck

 Tiledのマップのロードで長く行き詰っていた(Nezフレームワークを使用中)。

Content.Load<TiledMap>の行で、実行時にMonoGameのContentLoadExceptionが出た。Content/binとContent/objを削除し、再びcontent.mgcbをビルドするとエラーは出なかった。理由は分かっていない。

Woditor

 ハマっていたため、ウディタローグライクを作っていた。やれば進むというのはいい。

f:id:samba_4e:20170408010606p:plain (カーソル位置にも白枠を表示)

 だが常に進むことを要求されるとうんざりすることもある。うんざりするとゲームをやりたくなるが、やりたい3Dのゲームは今プレイできない。遊びたいゲームを自分で作るしかないのだ…。

 インフラ整備的な下準備は完了した。ダンジョン生成は過去に作ったものをそのまま使っている。また簡単なプレイヤのコントローラを作った。いい開発作業場を作れたと思う。(“土台を作った"とは思わない。土台は変えられないものだから、そもそも作業場だけがある方がいい気がする)。

 オブジェクト指向を多少身に着けてからの再挑戦、まさに強くてニューゲームとなる。ウディタのコードが、前よりもはるかに分かりやすくなった。仕様の決定で数回悩んだが、分離によって解決できた。分離により、仕様のコードとつながる場所が仕様と疎結合になる(どのような仕様にも差し替えられるようになる)。これで仕様を決めるという問題が無くなり、各機能も役割がはっきりして把握しやすい。考えていたのとは別の、新たな可能性まで生まれてきた。この経験を経て、僕はプログラミングで確かなものを得たと思った。発想によって見事に問題が消えることがあるが、その1パタンとして、適切な分割を考えられるようになったのだろう。今後はさらに、レベルの高い発想を自分で生み出してプログラミングしていくようになりたい。僕にとってプログラミングで重要なのはここで、手続きではなくてプログラムの構造の方に関心がある。

 (やるなら)今後の実装:Action(攻撃など), AI, Item, Trap, Inventory, HUD, Option, and the Game Contents

 余裕があれば初心に戻ってクソゲーを作り、ウディコン(2017年7月)に提出したい。ただ、もしもウディタユーザとしての自分の役割があるとしたら、ウディタを止めてプログラミングの海へ出ていくことの方だろうと思う。

Getting Started

Hello World

 4万強のPCを買った(Windows)。画面が悪いが、その他のすべてはとても良い。スピーカはあまり使わないためこだわらない。

ダウンロード

  • Visual Studio PCL関係のソフトやそれっぽいソフトと一緒にインストールしておく(30GBほどになった)。なければPCL関係のプロジェクトを読み込めず、エラーが出る。VSをアンインストールするとPCL関係のツールも消えるため注意。VSとは分けてインストールすることもできるらしい。

  • Xamarin Studio Mac/Linuxでも動くIDE。僕はこちらを使うけれど、使うのはMS Visual Studioでも良い。

  • MonoGame 低レベルのマルチプラットフォームフレームワークver.3.5をダウンロードする。今現在のNezはver.3.6に対応していない(MonoGameの一部APIが変わったため)。ver.3.6のMonoGameをインストールしていたり、間違ってPCLのMonoGameを参照していると、ビルドは成功するが、実行時にエラーが出る。〇〇が無い、〇〇がnullだ、など間接的なエラーとなる。

  • Nez 海外の人が個人で作ったフレームワーク(ドキュメントはココ)。MonoGame(or FNA)のPCLであり、MonoGame/FNAが対応しているプラットフォームで動く。僕はこれを使う。

Nez-Samplesをダウンロードする場合

 Nez-SamplesのSetupの指示に従う。もしもgit cloneコマンドを使うなら、Git Bushなどをインストールして使用する(Windowsの場合)。手動でNezをコピーしてプロジェクトに加えるのでも良い。

デバッグできない?

 Run without Debuggingなら動くが、デバッグで実行するとエラーが出る。調査中。

自分のプロジェクトを作る場合

MonoGameの設定

 Xamarinを起動後、ホームでツール > アドイン を選択して、MonoGameのアドインを検索して加える。これでMonoGameのプロジェクトテンプレートが手に入る。新規プロジェクトでは、MonoGame Cross Platform Project(=OpenGL版)を選ぶ。(Windows版、すなわちDirectX版にはNezが対応していないため注意。実行時にエラーが出る)。そのまま実行して青い画面のウィンドウが出れば、MonoGameの設定は成功している。

Nezの設定

 Nezをコピーして、自分のソリューションに参照を加える(Nez.Portable)。Nez.PipelineToolは実際のアプリでは使用しないため、他プロジェクトからは参照しない。

Pipeline ToolのSetup(必要ならば)

 Docsより

open the Pipeline Tool by double-clicking your Content.mgcb file and add references to PipelineImporter.dll, Ionic.ZLib.dll, Newtonsoft.Json.dll and Nez.dll.

 これはNez - Getting Started - YouTubeの16:10からで解説されている。僕は設定の仕方が分からなかったため見た。動画は拡大すればくっきりと見れる。

Be sure to set the Build Action to Content and enable the “Copy to output directory” property so they get copied into your compiled game.

T4 Templteの利用

 add > new file > T4 Template で追加したファイルに、NezのT4テンプレート(.tt)の内容をコピー。右クリックの Tools > Process T4 Templateでファイルを生成してくれる。

右クリックの add files からNezのt4テンプレートファイルを加えても動作しない。このとき、ファイル名の左にプラスマークが表示されている。T4テンプレートのファイルとしてプロジェクトに認識されていないようだが、どうすればいいのか…。

 T4テンプレートで使われるデフォルトのパスはcsprojファイルと同じ階層から始まっている。windowsならば"../“で一階層前に戻ることができるため、パスを書き換えてフォルダ分けできる。 未調査: T4の更新の自動化?

Hello World

 Nez-Samplesを参考にしてゲームを作る。さあ始まりだ!

2D Game Dev Environment

Code-based Environment

TypeScript, Python, etc.

Dev Tools

GUI-based Environment

Frameworks

The World

  • Scene

  • Entity - Component - System

    • Entity

    • Component

    • System

Rendering

  • Sprites

  • Scene Graphs

Utilities

  • Timers

  • Coroutines

Resources

オブジェクト指向 - Object-Oriented Programming

アーキテクチャ - Architecture

ローグライク- Roguelikes

RPG