XNA: なんかもう 2 次元でいいかなみたいな

XNA は、Windows PC や Xbox 360 で動かせるゲームを作るためのプラットフォーム。個人でも利用できるんだけど、いろいろ敷居が高い。以前に一度試したんだけど、人に遊んでもらうための敷居が高かったため、すぐにやめてしまった。


そのときに悪いことをしたなぁとずっと思っているのが、とあるフレンドとのやりとり。

(ある日)
フレ : へー、XNA っていうの使うとゲーム作れるのか。sardine が作ったのを俺が遊んだりもできるの?
自分 : うん。でも、360 だと遊ぶだけの人でもお金かかるみたいだし、Windows で動かす場合も 360 の有線コントローラがいるみたい。
フレ : ふーん。

(数日後)
フレ : 有線コントローラ買ってきたぜ! これで XNA のゲーム動かせるんだよな!
自分 : それがさー、最近バージョンアップ (XNA GSE Beta 2 のリリース) があってさ、うちの PC だと動かせなくなったんだよね。XNA やめるわー(^ω^)
フレ : ……。

で、つい先日、本屋で XNA の入門書を見つけたので、またちょっと触ってみることにした。たぶん今回もゲームを作るとこまで行かない気はするけど。エターナル。
以下、ここまでの作業メモ。

開発環境

現時点での最新版は、"XNA Game Studio (GS) 3.0" になっている。Xbox Live! Community Games に対応しているのが大きな特徴だけど、そもそも日本では Community Games が始まっていないので、"XNA Game Studio Express (GSE) 1.0" の時代とあまり変わっていないように思える。細かい使い勝手が改善されてはいるみたい。
実は XNA GS 3.0 はすでにインストール済みだった。丁度 PC を買い換えたすぐ後にリリースされたので、動くかどうか試してみたかったからだ。
さらにいうと、作ったゲームを Xbox 360 で動かすのに必要な Creator's Club もずっと契約しっぱなしになっているので、いつでもやろうと思えばやれる状況にはあったんだよね……。

入門書

2 年前は、2D グラフィックスをちょっとだけ試して終わっていた。次やるなら 3D やってみたいな、と思ってたんだけど、3D 関連の知識がまるっきりない。そんなときに見かけた本がこちら。

XNA 3.0 に対応している書籍は、たぶん現時点ではこれだけ。目次を見ると一通りのトピックが載っているっぽかったので、買ってみた。まだ読んでる途中だけど、そこそこ読みやすい。XNA Framework の基礎から始まって、2D/3D グラフィックス、ネットワーク、ストレージ、GameComponent、コンテンツパイプライン、ゲーマーサービスなど、XNA の機能が網羅的に解説されている。基本的な内容から順を追って説明してくれているので、C# 開発の経験があれば、特に困ることなく読み進められそう。
ただし、今回の目当てだった「3D プログラミングの入門」という意味で言うと、不満が残る。基礎知識をちゃんと説明してくれているのでわかりやすいんだけど、モデリングツールで作成したモデルの表示については最後にちょっと触れるだけ。3D プログラミングって、ここから先をいかにうまくやるかが重要だと思うので、もう少し「この先はどっちの方向に進めばいいか」という指針くらいはあってほしかった。発展的なトピックを扱った続編とか出るんだったら買います。

モデリングツール

ネットで探してみると、XNA 開発に利用できる 3D モデリングツールはいくつかあるみたい。しかしどれも僕には敷居が高い……。この手のツールって、Windows の一般的な GUI と考え方が違うから、わからないと簡単なところでつまずいちゃうんだよね。
今回まず試してみたのは、Softimage Mod Tool。

Softimage Mod Tool
http://www.softimage.jp/modtool/

付属のチュートリアル映像わかりやすい。でも、なんかテクスチャ貼ったらはがせなくなった;;
一旦諦めて、次は trueSpace を試してみる。

trueSpace 7.6
http://www.caligari.com/Products/trueSpace/tS75/brochure/intro.asp

なぜか最初からストームトルーパーの頭部が入ってたので貼ってみましたお。よくわかんないけど、Front って書いてあるウィンドウでこちら側向いてるからいいんだよね。エクスポートして、アセットに追加したのを読み込んで表示して……。

あれ? これ、下側が見えてる? なんで? ……あ、もしかしたら、ワールド座標の設定が抜けてる? CopyAbsoluteBoneTransformsTo() しておいて、mesh.ParentBone.Index で参照して、と……。

なぜ左を向いているー!! コッチヲミロォォォォ!!!

わしゃ疲れたよ……

3D ってなんでこんなにややこしいんだ。
もうなんか 2D でいいかなって気がしてきたよ……。