XNA教の野望
XNA教だ!XNA教だ!
目次
 自己紹介
 XNAとは、C#とは
 XNA is Dead?
 C# vs C++

 XNA vs DXライブラリ
 XNAのはじめ方
自己紹介
 名前: MASA
 Twitter: MASA_T_O
 所属: 同人ゲームサークル オーバーイプシロン 代表
 UTMC的に: 先代部長

 代表作: 『怨霊』『noita』
XNAとは
 Microsoft謹製のマルチプラットフォームゲームライブラリ
 Windows PC だけではなく、Zune(販売終了)やXBox360(そろそろ新規作品の受
け付け終了)やWindows Phone(日本で2年前に1機種出たきり)でも動くゲームが
作れる
 世界的に割とメジャー(だった)

 DirectX9.0cベース
C#とは
 Microsoft謹製のプログラミング言語
 C言語っぽい名前だが基本文法はむしろJavaに近い
 JavaのようにVM上で動作する
 Windows向け開発ではほぼなんでも書ける

 Windows以外でもそれなりに動く
XNA is Dead?
XNAは死んだ?
 2013年2月に開発終了が発表された
 最新プラットフォーム向け開発には対応せず(Windowsストア, WP8, Xbox One)
 VisualStudio2012には対応せず(改造すれば使える)
 最新のC#4.5には対応せず
私が死んでも第2第3のXNAが
 XNA互換のライブラリが複数オープンソースで開発されている(後述)
 大量のサンプルやドキュメントなどは今でもアクセス可能
 情報源も結構ある
 PC向けならそもそも問題なく開発できる
C# vs C++
可燃性
C#でできること
 かなり速いコンパイル
 結構速い動作
 豊富かつ整理されたライブラリ
 型安全

 リフレクション
 分かりやすいエラー・例外
 ガーベジコレクション
 強力な入力補完

 手軽なGUIアプリケーション作成
C#ではできないこと
 黒魔術的マクロ・テンプレート
 ガーベジコレクションの無効化
 C言語的素朴な書き方
よくある誤解
 ランタイム必要なのでは?
 Windowsに標準でインストールされている、WindowsUpdateで自動的に入る

 Windowsでしか使えないのでは?
 オープンソースで互換の環境が作られている
 速度や最新機能への対応状況では劣る
 そもそもオープンな規格で作られている
XNA vs DXライブラリ
「DXライブラリを駆逐してやる!」
XNAの特徴
 しっかりしたオブジェクト指向
 コンテントパイプライン
 XInputのみ扱える
 XACTに対応

 3Dに強く、2Dに強くない
利点:オブジェクト指向
 正しくオブジェクト指向してる
 入力補完、編集時のヘルプ機能が強力
 型で混乱しない
利点:3D機能
 設定項目の多い3Dグラフィクスを扱うにはDXライブラリのスタイルだと厄介
 そこそこ使いやすく無駄も少ないAPI設計
 標準のシェーダーがそこそこ高機能
欠点:2Dプリミティブ機能
 DXライブラリにあるような「直線を引く」「円を描く」などの命令はない
 欲しければテクスチャの描画機能で工夫する or 3D描画で行う
 DXライブラリでも内部的には3D描画だと思われるのでパフォーマンス差はあまりない
はず
欠点:文字列描画機能
 文字列を描画するにはコンパイル時点で使う文字や字形を決めておく必要がある
 文字サイズや使う文字を変えるには毎回コンパイルが必要
 多くの字形を使うノベルゲームなどには不向き
 もちろん縦書き機能はない

 縁取りなどの文字装飾も困難
利点?:コンテントパイプライン
 画像や音楽、シェーダなどをコンパイルしてからゲームで読み込む
 メモリが節約できたり読み込みが高速化したりするらしい
 コンパイル時にパラメタを設定していじることもできる
 XNA初心者にとって分かりにくいポイント

 コンパイルなしでデータを差し替えるのが困難になる
欠点:XInputのみ対応
 DirectInputを使ったパッドを扱えない
 マウスとキーボードは問題なく使える
 DirectInput対応にはXNA以外のライブラリを別途使うのが定石
 SharpDXかSlimDXあたり
利点?XACT対応
 Microsoft製のゲームオディオミドルウェア
 実行時のフィルタ操作やピッチ制御、ループ回数制御、同時再生数制御、3Dサウ
ンド再生などが可能
 XNA限定の技術ではないが情報が少なめ
 入力はWaveファイル限定
 コンパイル時に圧縮は可能

 再生位置を直接取得することは不可能
 遅延なしでの再生開始、再生開始時刻と現在時刻は取得できるので計算は可能

 XACTを使わない簡単なAPIでの再生にも対応
欠点:ランタイム
 プレイにはXNAのバージョンに合わせたランタイムがインストールされている必
要がある
 自動でインストールする仕組みもあるが不評
XNAの始め方
XNA代替環境
 MonoGame
 OpenGLベースの移植
 Windows以外でも動作
 コンテントパイプライン以外のほぼすべての機能が使える

 SharpDX Toolkit
 DirectXのC#向けライブラリSharpDXの高級API群
 XNAのグラフィック関係機能と同様の機能が使える
有用な情報源
 MSDN
 http://msdn.microsoft.com/ja-jp/library/bb200104(v=xnagamestudio.40).aspx
 公式リファレンス

 ひにけにGD
 http://blogs.msdn.com/b/ito/
 元XNA開発チームだったひげねこさんのブログ

 Xbox Live Indies Game -Eductation
 http://xbox.create.msdn.com/ja-JP/education/catalog/
 公式サンプル集、基礎から発展的な内容まで
有用なライブラリ
 メタセコイア・パイプライン
 http://blogs.msdn.com/b/ito/archive/2012/04/30/metasequioa-pipeline-1-1.aspx
 メタセコイアで作ったモデルをそのままコンテントパイプラインで読み込める

 WPFフォントプロセッサー
 http://blogs.msdn.com/b/ito/archive/2012/06/04/wpf-font-processor-part2.aspx
 日本語を描画するのにほぼ必須のライブラリ

Xna教の野望