C#で、ゲーム開発を行う環境について、表面的な部分のみ調べてみました。
パソコン環境では、Unityやユニバーサル Windows プラットフォーム (UWP) 、モバイル環境では、UnityやXamarin+Cocos Sharp が用意されているようです。
WPF
WPFは、グラフィックスの描画に、Direct-Xを使用しているので、ゲーム作成に使用しても、問題はありません。
ゲームの作成例
Unity
C#でゲーム開発を行う場合、現時点では、Unityを使うのが最も近道では無いかと思います。
書籍も多く発売されています。また、Unityの公式ページには、チュートリアルも存在します。
和尚本とも呼ばれる。C#を使った経験がない人が、Unity C#でゲームを作りたいときにおすすめの本らしい。
Godot
ふりーで、オープンソースのゲームエンジン
ユニバーサル Windows プラットフォーム (UWP)
C#の開発環境の中で、UWPは、警戒を呼び起こすプラットフォームです。
Microsoftのタブレット、スマートフォン開発環境が、毎年変化して来た末にたどり着いた場所だからです。
しかし、Windowsで、ゲーム開発をする場合、選択肢の1つとなります。
C#では、3Dグラフィックを駆使したゲームを開発するためのゲームエンジンUnityが、利用できます。スマートフォン・アプリ開発では、Xamarinという開発環境があります。
その一方で、UWPは、Xbox One 向けのアプリ開発環境であるため、Windows Phoneに新製品が出てこなくなっても、Windowsタブレットを見かけなくなっても、一定の価値があります。
しかし、UWPでアプリケーションを作成すれば、Windowsでも、Xbox One でも動作するアプリケーションができあがるかというとそうでもないようです。
DirectX SDK
DirectX SDK を使う場合は、.NET Frameworkの下でDirectXプログラミングを可能にするためのオープンソースAPIである。SlimDXが存在します。
Xamarin
スマホプラットフォームであれば、Xamarin+Cocos Sharp という組み合わせで、ゲーム開発が可能なようです。
XNA
XNAは、既に開発が終了していますので、未経験者がこれから学ぶのには適していません。
ジョイパッド入力に対応させたい場合
ゲーム開発が目的ではなく、ジョイパッドだけが使いたい場合が問題です。.Net Freameworkにジョイパッドの状態を読み取るイベントを用意しておいて欲しいと思うのですが、現実は厳しいです。
調べてみるといろいろな方法で、解決されてる方がいます。
- C#でジョイパッド入力
- [C#]DirectInputでジョイスティック(ゲームパッド)を使用する
- Taoを使ってC#/WPFでゲームパッドのボタンを読み取る
- JoystickInput
- XInput Game Controller APIs
C# からジョイスティック (ゲームパッド) の入力を取得するライブラリ
- ゲームパッドと振動
Windows プラットフォーム (UWP) 用の関連 API を使った、Xbox One ゲームパッドを対象にしたプログラミングの基礎について説明
- ゲームパッドの状態を取得する(XNA)
- ゲームパッドでUnityのゲームを動かそう
C#のリアルタイムキー入力の実装方法
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern short GetKeyState(int key);