体験談.
パズルゲームの罠
ゲームプログラミングの入門としてパズルゲームは魅力的です. なんか画面がシンプルで作りやすそうだし, アセットの調達も簡単で絵を描いてくれる友達がいなくても問題なさそうですからね.
しかし, 実際に作ってみると結構難しいです. ゲームロジックが比較的複雑なのも理由の一つですが, なによりもUIという概念を破壊しているように見えるのが入出力周りを作る上で大きな壁になります.
パズルゲームを作るとき, あなたは画面上のマスをクリックして駒を配置したり移動したりするインターフェースを設計するでしょう. それは何も間違っていません. 何も間違っていないのですが, このとき, 何がUIで, 何がゲームオブジェクトなのでしょうか? もっというと, ゲームオブジェクトと認識している駒やマスがUIとしても機能しているのがあまりにも気持ち悪く, UI/ゲームオブジェクトという区分を根底から覆されるように感じます.
マウス: やっかいなコントローラー
多くの文脈において, ゲームにおけるUIとはインターフェースとは名ばかりの「ゲームからプレイヤーへの一方通行の表示」に過ぎないのだと思います. 例えばスーパーマリオのプレイ画面の右上にあるスコア, 例えばテトリスの右にある次に落ちてくるテトリミノ, 例えばアドベンチャーゲームのアイテムスロット. これらはユーザーがそれをクリックしてどうこうするものではなく, ゲームが生成し表示しているだけに過ぎません. なぜかというと, そもそもこれらを一つのボタンとして機能させるためにはマウスが必要であり, PC以外の(ほとんどの)ゲーム環境にはそもそもマウスが無いからです.
よしゲーム開発をするぞと思ったとき, あなたの目の前にはPCがあるでしょう. おそらくあなたにとってPCでゲームをプレイするのは自然なことであり, ゲーム画面の様々なものをクリックできるのは当たり前なのだと思います. しかし, これは実はPCという環境に強く依存し, PC以外の環境では, 画面上に仮想的な入力装置はなく, 入力はすべて数少ないボタンを通して行われるのが当たり前なのです.
マウスというのはPCという環境に固有のものであり, また入力のたびに座標を取得して何がクリックされたのか判断しなきゃいけないなどの高度な技術が要求されるため, ゲーム開発の入門に際してマウスを使うゲームを題材に選ぶのはやめた方がいいです.
インタラクティブという概念
学習が進みマウス入力をゲームに導入する覚悟ができたときどうすればいいでしょうか? まず, UIとかいう単語には「ゲームからプレイヤーへの一方通行の表示」という意味しか与えないことにします. そして, それとは別にインタラクティブという「ユーザーが触れるかどうか」に関する概念を導入しましょう. まず, UI・ゲームオブジェクトの必要なオブジェクトに, このインタラクティブ性を与えます. これは, クリックやカーソルホバーなどの各操作に反応するかどうかというブールです. そして, クリックされたらイベントハンドラにそのことを報告するようにします. これにより, これらのオブジェクトは(本来の意味での)インターフェースのように振る舞います. ただし, 依然「どのオブジェクトがクリックされたのか」などの処理は別で必要です. ものによっては結構複雑な座標計算が必要な場合もあります. そこは, 各自で頑張ってください.