Re: コントローラの振動に関して。 ( No.1 ) |
- 名前:名無し 日時:2020/03/04 21:19
どこまで自分でできましたか?
|
Re: コントローラの振動に関して。 ( No.2 ) |
- 名前:sereparu 日時:2020/03/04 22:43
コントローラ振動対応のゲームを公開した経験があるので回答します。
まず、InputMapperはPCでコントローラを振動させるのに必須のものではありません。
市販のPC用コントローラは、基本的にInputMapperがなくても振動します。
少なくとも私が確認した限りでは、InputMapperがないと振動しないのは
PS4コントローラなど、本来はゲーム機専用のものを、PCで使用する場合など限定的なものです。
(ただし、Xbox360、XboxOneのコントローラはInputMapperなしでも振動します)
なので、私はInputMapperについての注意書きは特に書いていません。
マーク42さんの過去の質問を見ると、PS4コントローラでしか動作確認をしていないと思われるので
すべてのコントローラがInputMapperなしでは振動できないと勘違いされているのではないでしょうか?
もし、そうだとしたら、そんなことはないので、あまり心配する必要はありません。
Steamのゲームは色々プレイしていますが、これまでInputMapperの注意書きがあるゲームを見かけたことは一度もありません。
注意書きはあった方が親切かもしれませんが、多くのプレイヤーは注意書きを細かく読むことはありません。
InputMapperを使わないと振動しないコントローラをPCで使うようなプレイヤーは
そもそもInputMapperのことぐらいは既に知っている可能性が高いです。
また、個人的な意見ですが、コントローラの振動機能は、あくまでオプションだと考えています。
コントローラが振動すれば面白いですが、振動がなくても遊べるゲームが大半です。
振動を重視するプレイヤーはそこまで多くはないと思います。
以上です。
|
Re: コントローラの振動に関して。 ( No.3 ) |
- 名前:マーク42 日時:2020/03/05 02:17
ありがとうございます。
ではPC用のPS4コントローラはInputMapperなしでも振動するのでしょうか?
PCでゲームをする方は基本どんなコントローラでプレイするのですか?
個人的にはPS4のコントローラだと思っていました。
|
Re: コントローラの振動に関して。 ( No.4 ) |
- 名前:マーク42 日時:2020/03/05 09:16
補足ですいません。
敵の攻撃を食らったら振動するようにinputmapperを利用して作れたのですが、
どのパッドの番号もR2とL2に対応していません、というか反応しません。
例えばconst int PAD_1 = 4;はちゃんと×ボタンに対応しています。
振動を有効にしたinputmapperはR2とL2に対応するボタンはないのでしょうか?
inputmapperの設定は特にいじっておらずデフォルトのままで保存して開いています。
|
Re: コントローラの振動に関して。 ( No.5 ) |
- 名前:NNN 日時:2020/03/05 09:28
PS4コントローラーは名前の通りPS4のためのコントローラーです
PCの場合ゲームパッドと言われるコントローラーがあります。電気店とかで探せばあるかと。
inputmapperの知見はないですが、名前の通り入力をマッピングするものだと思うので
振動を実装するならまずそういうものが不要なPCに対応したジョイパッドで実装すべきかと思います
|
Re: コントローラの振動に関して。 ( No.6 ) |
- 名前:はるかぜ 日時:2020/03/05 12:34
家庭用ゲーム機のコントローラーはあくまでもその機械専用のものとして作られています。
PCでそれらのコントローラーをどうしても使いたい特別な理由がなり限りはPCゲームを作る側としては考えなくてもいいと思います。
で、一般的には家電量販店等で販売しているPC用ゲームパッドに対応していれば問題ありません。
InputMapperやその他の家庭用コントローラーをPCで使えるようにするソフトはゲームを「プレイする側」がどうしてもそのコントローラーを使いたい場合に使用するもの、という認識でいいと思います。
|
Re: コントローラの振動に関して。 ( No.7 ) |
- 名前:クロエ 日時:2020/03/05 15:18
>inputmapperの設定は特にいじっておらずデフォルトのままで保存して開いています
対応するように設定して保存する事はできないのですか?
|
Re: コントローラの振動に関して。 ( No.8 ) |
- 名前:sereparu 日時:2020/03/05 22:57
>どのパッドの番号もR2とL2に対応していません、というか反応しません
PS4コントローラのR2、L2はアナログ入力です。
アナログ入力は、押されたかどうかではなく、どれくらい押し込まれたかを検知するものなので
「PAD_1 = ×ボタン」のようなデジタル入力の定義とは異なります。
そのため、どのパッドの番号もR2とL2に対応していないのは当然のことで、不具合ではありません。
R2、L2を押すとき、ポチッと押すのではなく、少し押し込まないといけないので分かりますよね?
過去にされた質問の回答にもありましたが、DXライブラリでは
PS4コントローラのR2、L2は、GetJoypadDirectInputState のZ軸パラメータに
「-1000〜1000」のアナログ値として記録されます。
つまり、DXライブラリでは、そもそもR2、L2はボタンとして認識されません。
なので、R2、L2をボタンとして認識するかどうかはInputMapperの問題です。
InputMapperがどのようにアナログ入力をデジタル入力に変換しているかは分かりませんが
InputMapperはあくまで外部ソフトウェアであり、DXライブラリとは全く関係ありません。
ここはDXライブラリの掲示板なので、関係ないソフトの話題は控えた方がよろしいかと思います。
InputMapperは、コントローラのメーカーが使用を推奨しているわけではない非正規なものなので
他の方もおっしゃるように、InputMapperの動作について、ゲーム開発者が関知する必要はありません。
もし、それでもInputMapperを使って開発したいのであれば
今後は、この掲示板ではなくInputMapperの開発者に質問するようお願いします。
|
Re: コントローラの振動に関して。 ( No.9 ) |
- 名前:マーク42 日時:2020/03/06 00:44
皆様ありがとうございます。
PCでゲームを行っているみんながInputMapperを有効にして(家庭用の)コントローラを使っていると思っていました。
またDXライブラリとInputMapperにも関係があると思っていました。
どうやらPC用のコントローラを使えばInputMapperなどがなくても振動したりできるとわかりました。
なのでPC用のコントローラを購入しようと思います。
どうもありがとうございます。
たぶんここに載っているようなコントローラだと思います。
//heim.jp/magazine/161479
ボタンの配置などはどのコントローラを同じなのでしょうか?
例えばPC用のPSっぽいコントローラの×ボタンはPC用のXBOXのコントローラのAボタンと
同じ位置なので、プログラムに×ボタンで攻撃と書いた場合、XBOXのコントローラのAボタンは
PC用のPSっぽいコントローラの×ボタンと同じ位置ゆえにAボタンを押しても攻撃となるのでしょうか?
答えていただける範囲で構いませんのでお願いいたします。
|
Re: コントローラの振動に関して。 ( No.10 ) |
- 名前:マーク42 日時:2020/03/06 00:53
できれば、InputMapperを使わずにPC用のコントローラで振動ありのゲームを作った方がおりましたら
なんのPC用のコントローラを使っていたのかを、使い心地が良い、無線で安いなどおススメのPC用のコントローラがありましたら
URLを載せていただけないでしょうか。
どうかよろしくお願いいたします。
|
Re: コントローラの振動に関して。 ( No.11 ) |
- 名前:でぃあぶろ 日時:2020/03/06 11:58
XinputだったりDirectInputだったり入力方式があるので,
恐らく全てのコントローラでボタンの配置は同じではないと思います.
と言うかわざわざPCゲームでコントローラ使いたいような人は
何らかの外部ソフトを使って自由にボタン配置をいじってる人が多いように思います.
ただNo.2のsereparuさんの回答にあるように,
振動はオプション, 所謂おまけ程度に考えた方が良いように思います.
PCゲームではキーボードを使用してプレイすることを前提にしています(モンハンなんかはかなり無理がありましたが).
なので開発側としてはどちらかの入力方式に対応しています(今ならXinputがメジャーですか?)くらいを明記しとけばいいのではないかと.
あと振動機能って嫌いな人は結構嫌いなイメージがあるので振動をオフにする機能は導入したほうが良いと思います.
というかまあ大前提として振動機能どころか, コントローラ対応も2の次3の次でよろしいと思います.
コントローラ使ってまでやりたいと思わせるゲームを作り上げることがまず最優先かと.
|
Re: コントローラの振動に関して。 ( No.12 ) |
- 名前:クロエ 日時:2020/03/06 17:40
XBOXのコントローラーはマークさんが見ている環境と同じです。
それは
「コントローラのボタンの確認と攻撃時の振動」
で解決したのですよね?
|
Re: コントローラの振動に関して。 ( No.13 ) |
- 名前:マーク42 日時:2020/03/06 21:00
えと、私の勘違いで過去の質問に似ている質問となってしまいました。
あの、R2やL2をPC用のコントローラで確認したところデジタルでないので反応はしませんでした。
ということはR2やL2などのアナログが認識できるようにプログラムを追加したほうがいいのでしょうか?
|
Re: コントローラの振動に関して。 ( No.14 ) |
- 名前:マーク42 日時:2020/03/08 03:27
補足ですいません。
敵の攻撃を食らったら振動するようにinputmapperを利用して作れたのですが、
どのパッドの番号もR2とL2に対応していません、というか反応しません。
例えばconst int PAD_1 = 4;はちゃんと×ボタンに対応しています。
振動を有効にしたinputmapperはR2とL2に対応するボタンはないのでしょうか?
inputmapperの設定は特にいじっておらずデフォルトのままで保存して開いています。
|
Re: コントローラの振動に関して。 ( No.15 ) |
- 名前:管理人 日時:2020/03/09 05:03
> 振動を有効にしたinputmapperはR2とL2に対応するボタンはないのでしょうか?
手元では L2 は 10、R2 は 11 でした
|
Re: コントローラの振動に関して。 ( No.16 ) |
- 名前:sereparu 日時:2020/03/10 22:10
すみません。
先ほどの私の書き込みに誤った情報がありましたので訂正します。
「PS4コントローラのR2、L2は、GetJoypadDirectInputState のZ軸パラメータに
「-1000〜1000」のアナログ値として記録されます。」と書きましたが
これは、InputMapper を使用した場合の状態でした。
InputMapper を使用しない場合は、GetJoypadDirectInputState の
Rx(X軸回転パラメータ)に L2、Ry(Y軸回転パラメータ)に R2 のアナログ入力値が記録され
同時に、Buttons[6] に L2 、Buttons[7] に R2 のボタン入力値が記録されていました。
また、GetJoypadInputState の場合は、PAD_INPUT_7 が L2、PAD_INPUT_8 が R2 に対応しています。
PS4コントローラはアナログ値とボタン入力値の両方が一度に取得できる特殊な仕様のようです。
なので「DXライブラリでは、そもそもR2、L2はボタンとして認識されません」と書いたのは誤りでした。
確認が不十分で、申し訳ありません。
InputMapper をデフォルトの状態で使用していると
GetJoypadInputState や GetJoypadDirectInputState で
L2、R2 のボタン入力値が取得できないようです。
以上のことから、マーク42さんがL2、R2のボタン入力値を取得できないのは
InputMapper を使用していることが原因であり、InputMapper を使わずに
そのまま GetJoypadInputState か GetJoypadDirectInputState を使えば
L2、R2 のボタン入力を取得できるはずです。
|
Re: コントローラの振動に関して。 ( No.17 ) |
- 名前:マーク42 日時:2020/06/02 17:39
sereparuさん返信遅くなりすいません。
sereparuさんのような賢いプログラマではないので、私なりに頂いた解答も時間をかけて、調べてさせていただきました。
今はInputMapperを使用してはいません。
PC用のXBOXのジョイコンを使いDXライブラリのリファレンスから見つけた関数でボタンの起動の確認をしました。
ですが、アナログ値を得るボタンだけはその関数では対応できなかったので以下のプログラムをDXライブラリのリファレンスから頂きました。
if(((GetJoypadInputState(DX_INPUT_KEY_PAD1) & PAD_INPUT_1) == 0))
// パッド1の入力を取得
GetJoypadAnalogInput(&InputX, &InputY, DX_INPUT_KEY_PAD1);
wsprintf(String, "X = %d", InputX);
DrawString(0, 0, String, Cr);
wsprintf(String, "Y = %d", InputY);
DrawString(0, 16, String, Cr);
こちらの関数のおかげでR2とL2のアナログ値を得ることができました!
解答が大変遅くなり、申し訳ありませんでした。
|