Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

わんくま同盟 東京勉強会 #89に行ってきた(その1 MonoGame で作る C# ゲームプログラミング!)

f:id:JHashimoto:20140409044240j:plain

わんくま同盟 東京勉強会 #89に行ってきました。

わんくま同盟
わんくま同盟 東京勉強会 #89

 

全4回に分けて、セッションの内容を紹介します。今回は第1回です。

1つ目は、赤坂玲音さんのセッション「MonoGame で作る C# ゲームプログラミング!」でした。

導入部分

  • C#の唯一の苦手分野はゲーム
  • ゲーム開発ツールの不足
  • 最新のWindowsストアアプリでも対策されなかった
  • ゲーム開発はC++/DirectX が推奨されている
  • 多くがC++前提に作られている

なぜゲームが苦手なのか

  • 仮想的な実行環境は総じて苦手分野
    • 頻繁に変化するAPI
    • 抽象化層を持つ実行環境は、下層レイヤーの変化に弱い
    • その世代のハードウェアに最適な設計が必要

MONOGAMEとは?

  • XNAFramework互換のオープンソース実装
  • 主にゲーム開発を対象とするフレームワーク
  • クロスプラットフォーム
  • ハイエンドなリアルタイム処理

XNA Framework とは?

  • .NET Frameworkベースのゲーム開発フレームワーク
  • C#でゲーム開発ができる

XNA Framework開発終了

  • 開発終了が正式アナウンス
  • 今後、新しいバージョンの開発・更新はしない

そしてMonoGameへ

  • Microsoftも公式ブログでMonoGameを紹介
  • 競合ではなく補完関係にある

MonoGameのメリット

  • クロスプラットフォームでゲーム開発
  • Unityからの脱却
    • 現状iOSやAndroid向けのゲーム開発で有力な存在だが...
    • APIの設計が荒く、バグも多い
    • Monoのバージョンが古い
  • C#でWindowsストアアプリゲーム作りたいならコレ
    • XAMLとの相互運用が可能な唯一の選択肢

MonoGameの開発スタイル

  • Initialze(初期化)
  • LoadContent(コンテンツの読み込み
  • Update(データ更新)
  • Draw(フレーム描画)
  • 通常1秒に60回UpdateとDrawが呼び出される
    • 16.6m秒でUpdate、Drawの処理を終えないといけないということ
    • リアルタイム性が重視される世界
  • プロジェクトテンプレートでOpenGLProjectを選択した場合
    • OpenALのDLLがないという例外が出る
      • MonoGameインストールした後、インストーラ(oalinst.exe)を実行する
  • ゲームエンジン、ゲームエディタではない
  • フレーム駆動方式
    • ゲームループでUpdateとDrawを交互に実行し続ける

XNAから移行するときの注意点

  • 非互換API
    • Xbox360、XboxLive依存の機能
    • XACT
  • プログラマブルシェーダー
    • HLSLからコンパイルされたバイナリはDirectX依存なので使えない

コンテンツパイブライン

  • プロジェクトのビルドと同時にアセットを変換する仕組み
    • 対象プラットフォームごとの最適化
    • アセット管理とゲーム本体の分離
    • 要はプラットフォームに最適化されたゲームオブジェクトのシリアライズ、デシリアライズ処理
  • MonoGameはXNAのコンテンツパイブラインの実装を使用する
    • 現状、VisualStudio 2010とXNA Game StudioとWindowsが必要
    • ビルドしたものをMonoGameにもっていく必要がある

まとめ

  • XNAの資産がある人は、MonoGameに移行を
    • 低コストで最新のプラットフォームに対応できる
    • C#で開発したいけどUnityは避けたい場合に
  • 中長期的な視点で、依存は避けたい
    • 本家の更新が止まった今、新機能の実装は期待できない
    • レンダリングのみ依存させ、それ以外はPCLなどで対応

リンク

第2回のリンクです。

わんくま同盟 東京勉強会 #89に行ってきた(その2 Knockout.js の利用とカスタムバインディングの利用) - プログラマーな日々

 

第3回のリンクです。

わんくま同盟 東京勉強会 #89に行ってきた(その3 async/awaitの基本 by 荒井省三さん) - プログラマーな日々

 

第4回のリンクです。

わんくま同盟 東京勉強会 #89に行ってきた(その4 Dynamics CRM Online を使ってみよう by えムナウさん) - プログラマーな日々