Old Articles

ギーク気取りでオープンソースをdisる

大分昔に作ろうとしたけど途中で飽きて投げ出したゲームもどきですが、なんと地味に作り続けていたのです。 進捗は無いに等しいですが、何気に地面に影が出るようになりました。HLSL を自分で書くの超面倒くさい!! やり方としては広く知られているシャドウマップで、色んなところで解説されているサンプルコードほぼそのままなんですが 行列とかマジわからん…学生の頃にちゃんと勉強しておけばよかったと思いましたね。

そもそもシェーダーをわざわざ自前で実装したのは、モデルを作るのが面倒くさくて 板っぱに絵を描くだけでキャラクタにしようとしたら、 真横を向いたときにキャラが見えなくなるという問題があったので 仕方なく対応したわけで、半端に横着しようとしたら余計に面倒になったという。 なかなか都合よくはいかないもんです。 キャラがペラペラなので横を向いて被弾を防ぐというゲームシステムなのはペーパーマンでしたっけか。

今時ゲームを作るなら Unity か Unreal Engine か、それともそれ以外かって感じですが、私は XNA で作ってました。 その XNA もとっくの昔にサポートが終了し、今後のプラットフォームには対応しないということでどうしたものかと思ったんですが、 XNA 互換フレームワークである monoGame を使うことにしました。 XNA とソースレベルの 100% 互換を目指しているだけあって、元あったコードはほとんどそのまま移植できました。 互換性の為に DirectX9 相当の機能までしか使っていないわけですが、まぁ私のレベルで最新の API を使うことは無いので問題ないでしょう。

開発環境も Visual Studio 用のインストーラが用意されてるので、オープンソースにありがちな面倒くらいライブラリの整備も要らないのがありがたい… そして実行環境も .exe ファイルのあるフォルダに必要な dll を全部乗せすれば、 フォルダに展開してダブルクリックするだけのお手軽配布が可能なのがありがたいです。 XNA の何が面倒って、再配布パッケージをユーザ個別にインストールしてもらう必要があるんですよね。 Visual Studio でセットアッププロジェクトを作成すれば自動的に解決してくれるようなインストーラを作ってくれるのかもしれませんが、 InstallShield のユーザ登録を別にしなきゃならないというのが実に納得いかなくて使う気にならない…

とはいえ何もかも素晴らしくメリットしかないというわけではなく、なんだか至る所に雑な部分があって 開発陣のモチベーションが尽きてきているのではと心配になる面もあります。 まず大きいのが、シェーダーの動作を HLSL で記述した fx ファイルが Visual Studio 上でコンパイルできません。 また、 XNA のリソースから読み出すためのコンテントインポータが実装されていないので、XNA のようにコード中で Load メソッドを呼び出すだけで使用可能、 とはならず、一旦リソースからバイナリデータとして読み込んで、これをエフェクトクラスにキャストして…という回りくどい手順が必要になります。

まあほとんどの場合、自前で HLSL を書く場合はシェーダーの読み込みとパラメータの受け渡しを担当するクラスを一緒に作るので 最初の実装時以外はあまり問題にはならないのですが、やっぱりあんまりスマートじゃないなぁと思います。

また、Windows 用のゲームを作る場合、DirectX と OpenGL のどちらを使うか選べるんですが、DirectX だと Windows8 以降が必須なのが辛いです。 Windows7 でも開発、実行はできるんですが、 XAudio がバージョン決め打ちされてるせいで、 Windows7 でも絵は出るものの音が出ません。

一方で OpenGL だと、音を出すために OpenAL を開発環境に個別にインストールする必要があります。 コンパイル後の実行フォルダにも DLL がコピーされないので、配布の際には自分でコピーしなければならないのが面倒です。 DLL をコピーするビルドスクリプトを書きましょう。 monoGame のインストーラに OpenAL のインストールを選択するところがあるんですが、添付の OpenAL インストーラはただのダミーなのか 実際には DLL はインストールされないんですよね… (ver. 3.1時点)

それと OpenAL 使用で効果音のファイルに wave ファイルを使う場合、16 ビットの音源を使わなければなりません。 フリー素材として更改されている効果音ファイルはたまに 8 ビット音源のものがあって、これを使った場合 音がおかしくなったり、そもそも音が出なかったりします。 厄介なのはそういう対応していない音源ファイルを使っても、特にエラーになったりはしないというところです……

Windows だけじゃなく、 Mac や Linux、ゲーム機用の開発環境にも使える monoGame なので、すぐに消えてなくなるものでは無いでしょうが、 配布時のライセンスなど面倒事を考えると、やっぱり Windows 環境用のゲームは Microsoft 公式の開発環境が欲しいなぁと思います。 Microsoft 的には DirectX のゲームは C++ で作れというスタンスのようですが、やっぱり C# の生産性は大きいと思うので、 DirectX12 & Windows 10 用に次世代 XNA を作ってくれないかなぁと思います。 C++/CLIで作れといわれてもなぁ。