XNAとはなにか?
XNAうれしいところ、うれしくないところ
                2009/10/10
                      長 健太
       cs8k-cyu@asahi-net.or.jp
私はなにものか
フリーゲーム開発者

ABA Games

当たり判定ゲー
当たり判定ゲ

シューティング

SIG-Indie1回目   http://www.asahi-net.or.jp/~cs8k-cyu/
今日の話
XNAの 宣伝 布教 研究 にきました

XNAを多くの人に知ってもらいたい

犠牲者 仲間を増やしたい
背景
Xbox360でゲームが作れるようになった

これは面白い!

みんなも何か作りたくなるよね!?

「いや、別にそんなでも」

あるぇー?          ← イマココ!
より多くの人にXNAに興味を
まあいろいろ欠点も多いしね……

今日はXNAいいとこわるいとこ両方を考えよう



面白そう!遊んでみたい!という人が増えれば

改良ポイントが見つかれば
目次
私の略歴
XNAとは
今日の研究会の流れ
XNAいいとこわるいとこ
略歴
                                                                Silverlight
                                                         XNA
                                               Windows
                                                               Flash
                                       P/ECE
                      WonderWitch
           PC-9801                  iAppli
 PC-6001
                     Palm
           MSX2
PC-1500
XNAで作ったもの
GearToyGear
XNAとは
Xbox360向けゲーム開発環境

XNA G    St di (XNA
    Game Studio(XNA GS)で開発

Visual Studio+C#で360で動くゲームを



でもただの開発環境だけじゃない
XNA コシステム
XNAエコシステム
 遊んでみて!
          作る人




          遊ぶ人   面白かった!
XNA コシステム
XNAエコシステム
   遊んでみて!
             作る人
 XNA GS


ピアレビュー
                    ユーザ
                      ザ
 Xbox Live          レーティング
 インディーズ
 ゲーム
 ゲ ム         遊ぶ人   面白かった!
インディ ズゲ  (
Xbox Liveインディーズゲーム(XBLIG)
                        )
XNAゲームを360のマーケットプレースへ

開発者間のピアレビューを経て公開
開発者間のピアレビュ を経て公開



開発環境+配布の仕組み

遊ぶ人までダイレクトにお届け
今日の研究会の流れ
XNAの特徴

マイクロソフトの取り組み

ピアレビューとは
ピアレビ  とは

XBLIGの実際

XBLIGでどんなゲームが遊べるの?
今日の研究会の流れ (第一部)
          (第 部)
長健太(ABA Games)
「XNAとはなにか?XNAうれしいところ、うれしく
  ないところ」

徳留和人(マイクロソフト株式会社 ホーム&エ
 ンタ テイメント事業本部
 ンターテイメント事業本部 XNA Group)
「マイクロソフトがXNAご説明します」
今日の研究会の流れ (第二部)
          (第 部)
XELF
「Xbox
「 b LIVEインディーズゲーム「ピアレビュー攻略」のた
        インデ  ズゲ ム「ピアレビ  攻略 のた
  めのXNAにおける開発のコツと特有の課題」

佐川直樹(こびとスタジオ)
「同人サークルが見たXboxLIVEインディーズゲームの実
「同人サ クルが見た        インデ  ズゲ ムの実
 情」

罰帝(ライター/デザイナー集団“bsks”(ビスクス))
「ゲームジャーナリストから見たXBLIG/注目作品ピック
「ゲ ムジ  ナリ トから見た     /注目作品ピ ク
 アップ」
パネルディスカッション
講演者の方々
+
zioさん (麻雀 三六荘)
 i さん
与野さん (XNA Today)
鶴淵さん (マイクロソフト)
XNAの特徴を知る
XNA特徴を知るために

うれしいところ、いいとこ
うれしいところ いいとこ
うれしくないところ、わるいとこ

を挙げてみる
いいとこわるいとこ
高い生産性
最新コンシューマ機での開発      いいとこ

Windowsと360の同時開発
XBLIGで世界の360にお届け

敷居の高さ
暴れ馬アーキテクチャ
#ifdef地獄           わるいとこ

そびえたつピアレビューの壁
高い生産性
洗練されたフレームワーク

豊富なライブラリ

Vector Matrix Quaternion Math

                                いいとこ
VS + C# + HLSL
DeskTopLive.xna (DTL.xna)
2時間半でライブでゲームを作って!

おまえは何を言ってるんだ




まあやってみるか
DTL.xnaの様子
六本木で200名とペアプロ
DTL.xnaの様子
オレ vs. 東京工芸大学学生さん4名
DTL.xnaで作ったもの
縦シュー抽選機
短時間でゲ ムが作れる!
短時間でゲームが作れる!
XNAの生産性の高さが発揮された!

ただ

それだけでなくて短時間で作るにはコツもいる
短時間でゲ ムを作るには
短時間でゲームを作るには
オレライブラリ整備

オレDSL整備

プロシージャル
プロシ ジャル

プロトタイピング

練習
オレライブラリ
オブジェクトプール
  public void ForEach(MyAction<T> func)
  {
      for (int i = 0; i < actorCount; i++)
      {
          func(ref Actors[i]);
      }
  }
オレライブラリ
Direct Mapping
 #if XBOX360
          Shape.SetToWritableVertexBuffer<T>(Actors, si, nsi - si);
 #else
          Shape.BeginAddInstance();
          Shape BeginAddInstance()
          for (int i = si; i < nsi; i++)
          {
             Draw(ref Actors[i]);
          }
 #endif
          shape.Draw();

       asm
         {
              vfetch pos, vi, position0
              vfetch color, vi, color0
              vfetch param0, ii, texcoord0
              vfetch param1, ii, texcoord1
               f h           1 ii       d1
              vfetch param2, ii, color1
         };
オレライブラリ
MathUtil
 public static float Sin(float a)
 {
   return (float)Math.Sin(a);
 }

 public static float Range(this Random random, float min, float max)
 {
   return ((float)random.NextDouble() * (max - min) + min);
 }
オレDSL
 コンテントパイプラインで処理する弾幕DSL
  nway 5 25
   fire -$2
     fire 0 0.6
   rep $1-1
     fire $2*2/($1-1)
       fire 0 0.6
   vns

[
[ContentImporter(".sslb", DisplayName = "SSL-B File Importer")]
           p      (      , p y                        p      )]
  public class SslbImporter : SslImporter<Sslb>
  {
     public override void ParseCommand(string[] strs)
     {
        switch (strs[0])
        {
           case "fire“:
プ シ ジャル
プロシージャル
ボス形状生成エンジン
プ トタイピング
プロトタイピング + 練習
面白いネタかどうかプロトタイピングしておく

軽く事前コーディング練習
軽く事前コ ディング練習

特に最初の四角が出るまでは
敷居の高さ
シェーダなど3Dまわりの知識

コンテンツパイプライン

英語圏の技術

初心者向けとは言い難い
                    わるいとこ

ちょっとしたゲームを作るには不向き
もっとサンプルコ ドがあれば
もっとサンプルコードがあれば
コンパクトなサンプルをとっかかりに

うちでも公開してます

ひにけにXNA
 http://blogs.msdn.com/ito/default.aspx
    p // g            / /            p


解説本
                                          なんとかする
最新コンシュ マ機での開発
最新コンシューマ機での開発
あこがれのXbox360での開発が

360のパワ を使ったすごいゲ ムが作れる
360のパワーを使ったすごいゲームが作れる

昔WonderWitchというものがありまして……

                       いいとこ
暴れ馬ア キテクチャ
暴れ馬アーキテクチャ
あれ案外パフォーマンスでないな……

CPUは非力、GPUは化け物
CPUは非力 GPUは化け物

.NET CFのくせ、オーバヘッド


                    わるいとこ
XNAのくせを良く知る
頻繁にGPUをたたいてはいけない

           i などを使ったGPUコ ル減
Direct Mappingなどを使ったGPUコール減
Di t M

シェーダに働かせる



                        なんとかする
W dowsと360の同時開発、実行
Windowsと360の同時開発、実行
Windowsと360で同じコードが使える

        でビルドしてすぐに360に配置
Windonwsでビルドしてすぐに360に配置
Wi d

Windowsからリモートデバッグ

                          いいとこ
# de 地獄、W dows上実行問題
#ifdef地獄、Windows上実行問題
パフォーマンスを稼ぐには#if XBOX360

シェーダモデル周りのコードは共有困難
シェ ダモデル周りのコ ドは共有困難



Wi d で必要なランタイムはどれ?
Windowsで必要なランタイムはどれ?

                          わるいとこ
オレライブラリ整備、ブラウザゲ 化
オレライブラリ整備、ブラウザゲー化
#ifが必要な部分をオレライブラリに封じ込め



ClickOnceなどの活用

Sil li h 化
Silverlight化


                  なんとかする
Silverlight化してブラウザゲ
Silverlight化してブラウザゲー
XNAもSilverlightも同じC#で記述可

SilverSprite XNAをSiverlightに変換
SilverSprite:XNAをSiverlightに変換
  http://silversprite.codeplex.com/


ただし2Dのみ

パフォーマンスにも差が

#if SILVERLIGHT WINDOWS XBOX360
Silverlightとの特性の差
Silverlight
CPU 速い
GPU 使えない

XNA (Xbox360)
CPU 遅い
GPU 爆速
WriteableBitmap
 Silverlightは点パーティクルは速い
#if SILVERLIGHT
      private const int background = 0xff << 24 | 0 << 16 | 0 << 8 | 0;
      public static WriteableBitmap Bitmap;
      public static int Width, Height;

     p
     public static void Initialize(Canvas parent)
                                  (       p     )
     {
       Width = (int)parent.Width;
       Height = (int)parent.Height;
       Bitmap = new WriteableBitmap(Width, Height);
       Image image = new Image();
       image.Source = Bitmap;
       parent.Children.Add(image);
       Clear();
       Invalidate();
     }
Silverlight化したゲ ムの例
Silverlight化したゲームの例
ひらりとかわせ、Hirarion
XBLIGで世界の360 お届け
XBLIGで世界の360へお届け
XBLダッシュボードから簡単にダウンロード

世界中の人に遊んでもらえる




                    いいとこ
そびえたつピアレビュ の壁
そびえたつピアレビューの壁
ピアレビュー突破のための各種条件

アマチュアなのにここまでやらんとダメ?

フリーゲーム配布不可


                   わるいとこ
ピアレビュ 攻略法
ピアレビュー攻略法
今日の後ほどの講演をお楽しみに

10/17 XNA ラウンドテ ブルも
          ラウンドテーブルも




                      なんとかする
いいことわるいとこ総括
作るところはいい感じ
                         作る人
             XNA GS


         ピアレビュー

             Xbox Live
             インディーズ
             ゲーム         遊ぶ人
届けるところは課題多い?
まとめ
XNAは困ったちゃんだけど面白い奴

360でユニ クなゲ ムが遊べるようになる
360でユニークなゲームが遊べるようになる



ピアレビューなど新たな仕組み、その問題
ピアレビ  など新たな仕組み その問題

詳細はこの後のプレゼン、パネルで!

XNAとはなにか?XNAうれしいところ、うれしくないところ