チケット #39277

macOS版 ゲームコントローラー対応

登録: 2019-06-01 22:08 最終更新: 2019-06-03 23:47

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

ゲームコントローラーを用いて、メイン画面で視点移動や演奏に関する操作を実施できるようにする。

参考チケット

  • #39085 iOS版 ゲームコントローラー対応
  • #39275 Win版 ゲームコントローラー対応

チケットの履歴 (10 件中 3 件表示)

2019-06-01 22:08 更新者: yknk
  • 新しいチケット "macOS版 ゲームコントローラー対応" が作成されました
2019-06-01 22:10 更新者: yknk
  • 詳細が更新されました
2019-06-02 00:59 更新者: yknk
コメント

仕様

ゲームコントローラーの識別

  • Apple公認のmacOS用ゲームコントローラーに対応する。Windows用ゲームコントローラーには対応しない。
  • 複数のゲームコントローラーが接続されている場合、先頭のコントローラーを制御対象とする。
  • ゲームコントローラーの接続通知、切断通知を受け取った時は、接続されているゲームコントローラーを確認して、 先頭のコントローラーを制御対象に切り替える。
  • ゲームコントローラーが1台も見つからなかった時は、何もしない。

メイン画面

ゲームコントローラーの操作と機能のマッピングは次の通り。カスタマイズには対応しない。

  • Pause ボタン: 再生/一時停止
  • A ボタン: 再生/一時停止
  • B ボタン: 停止
  • X ボタン: 視点移動:下降
  • Y ボタン: 視点移動:上昇
  • L1/R1 ショルダーボタン: 視点切り替え
  • L2/R2 トリガーボタン: 再生スキップ
  • 十字キー: 視点移動:前後左右
  • 左スティック: 視点移動:前後左右
  • 右スティック: 視線方向

設定画面

設定画面は用意しない。

備考

iOS版では、L1/R1ショルダーボタンを再生速度に割り当てていたが、macOS版では視点切り替えに変更した。 macOS版はVRビューを持たないため、視点切り替えの方が有用であると判断したため。

2019-06-02 00:59 更新者: yknk
コメント

対策1:ゲームパッド制御クラスの追加

MTGamePadCtrl

ゲームパッド制御クラスを新規追加。

2019-06-02 00:59 更新者: yknk
コメント

対策2:OpenGLユーティリティ修正

OGLH::ToDegree

ラジアンから角度への変換メソッドを追加。 円周率OGL_MATH_PIの定義場所を.mmから.hに変更。

GLRenderer::ResetViewPort

ビューポートリセットメソッドを追加。

2019-06-02 00:59 更新者: yknk
コメント

対策3:メインビュークラスの修正

MTMainView

メンバにゲームパッド制御オブジェクト(m_GamePadCtrl)とゲームパッド用視点番号(m_GamePadViewPointNo)を追加。

MTMainView::initialize

ゲームパッド制御オブジェクトの初期化処理を追加。 ゲームパッド用視点番号の初期化処理を追加。 ゲームコントローラー接続/切断通知先登録処理を追加。

MTMainView::startScene

ゲームコントローラー初期化メソッド呼び出し処理を追加。

MTMainView::scene_OnGameControllerChanged

ゲームコントローラー更新イベント通知メソッドを追加。

MTMainView::thread_ExecSceneMsg

ゲームコントローラー更新イベント受け取り時の処理を追加。

MTMainView::onGameControllerDidConnect

ゲームコントローラー接続通知イベントハンドラを追加。

MTMainView::onGameControllerDidDisconnect

ゲームコントローラー切断通知イベントハンドラを追加。

MTMainView::initializeGameController

ゲームコントローラー初期化メソッドを追加。 ゲームパッド制御オブジェクトの初期化と、ボタン押下時のイベントハンドラを登録。

MTMainView::changeViewPoint

ゲームパッド用の視点切り替えメソッドを追加。

2019-06-02 00:59 更新者: yknk
コメント

対策4:シーンクラス修正

MTScene::OnGameControllerChanged

ゲームコントローラー更新メソッドを追加。

MTSceneMsgOnGameControllerChanged

ゲームコントローラー更新メッセージクラスを追加。

MTScenePianoRoll3D::OnGameControllerChanged

ゲームコントローラー更新メソッドを追加。 同じメソッドをMTScenePianoRoll3DLive MTScenePianoRollRain, MTScenePianoRollRainLive クラスに追加。

2019-06-02 01:00 更新者: yknk
コメント

対策5:一人称カメラクラス修正

MTFirstPersonCam

一人称カメラクラスのメンバにゲームパッド制御オブジェクトm_GamePadCtrlを追加。

MTFirstPersonCam::MTFirstPersonCam

コンストラクタの初期化処理をグループごとにまとめ直した。処理の修正なし。

MTFirstPersonCam::Initialize

ゲームパッド制御オブジェクトの初期化処理を追加。

MTFirstPersonCam::Transform

ゲームパッドの右スティックの状態を取得して視線方向に反映する処理を追加。

MTFirstPersonCam::_TransformCamPosition

ゲームパッドの十字キー、左スティック、X/Yボタンの状態を取得して、カメラ位置に反映する処理を追加。

MTFirstPersonCam::OnGameControllerChanged

ゲームコントローラー更新メソッドを追加。 ゲームコントローラーの接続/切断が発生したときに教えてもらうために用意したもの。

2019-06-02 01:00 更新者: yknk
コメント

対策6:プロジェクト設定

Targets / MIDITrail

Linked Frameworks and Libraries に GameController.framework を追加。

2019-06-03 23:47 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする