Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -左右スティックを使う方法-

前から不思議に思っていた事の解決方法がわかりました
Unityのデフォルト設定だと,右スティックが使えません
いや,使えるのですが,設定する場所が無いのです

その方法が分かったので,デフォルトはなるべくそのままで右スティックを使えるようにする方法をまとめます

○機器入力の概要

何をどうしたいのか? というところから説明を始めます
なぜなら,私は個別には知っていたのですが,それを関連付けて考えるに至るまで時間がかかったからです

パソコン用にビルドして起動すると,環境設定ダイアログボックスが表示されます
Inputタブをクリックすると,キーコンフィグができます


Horizontalが左右,Verticalが上下のスティック動作を意味します
例えば,右スティック動作に設定を変えたいとします
Horizontalの右の Joystick 0 axis 0のところをダブルクリックすると,Input Configurationダイアログが表示されますので,その状態で右スティックを水平に入れて下さい
同様に,Verticalの右の Jpystick 0 axis 1に右スティックの垂直を設定して下さい
そうすると,右スティックに動作が変わります

これだと,左スティックで行っていた操作を右スティックに変更しただけで,両方同時に使う方法がありません
左用・右用の設定項目が欲しい

この左右スティックを個別の項目に分けて,プログラムで記述する方法をこれからやります

○キーコンフィグの項目設定

この設定項目は,Unityエディタ上から設定できます
メニューの Edit→ Project Settings→ Inputを選択すると,InputManagerが開きます


Horizontalが2つあるのですが,Typeの値によって別々の機器を意味します
ここではコントローラについて説明を行っていますので,2つ目の Typeが Joystick Axisの方だけを触ります

元からある Horizontalと Verticalは触りません(え?
このデフォルト設定があるサンプルが山ほどあると思うので,触ると面倒な事になるかも知れません
設定画面での表示だけ触りましょう。後でどっちのスティック設定かわからなくなりますから
Horizontalの Descripive Nameに,Stick L left/right
Verticalの Descripive Nameに,Stick L up/down
と設定することにします。日本人にはどっちが上下でどっちが左右かよくわかりませんから
日本語が書ければ良いのですが……書くと化けてしまいます

○右スティックの項目を追加

InputManagerの上にある Axesのすぐしたに Sizeという項目があります
ここはデフォルトで 17になっていると思います
これを2つ増やして 19にして下さい

そうすると,一番下に Jump項目が2つ増えます
それぞれ以下のように設定して下さい
Name : Horizontal2
Descripive Name : Stick R left/right
Positive Button : (空欄)
Gravity : 0
Dead : 0.19
Sensitivity : 1
Type : Joystick Axis
Axis : 3rd axis (Joystics and Scroolwheel)

Name : Vertical2
Descripive Name : Stick R up/down
Positive Button : (空欄)
Gravity : 0
Dead : 0.19
Sensitivity : 1
Type : Joystick Axis
Axis : 5th axis (joysticks)

要するに,HorizontalとVerticalと同じ設定にして下さい
Axisに関しては,機種依存というかドライバ依存です。また後でその話をします

これで,右スティック用の設定場所ができました
パソコン用にビルドして起動すると,環境設定に2つ増えている事がわかります

○プログラミング方法(JavaScript,C#共通)

右スティック用の設定項目が増やせれば,後は簡単です
GetAxisRawに渡す引数が異なるだけです

//左スティック(今までと同じ)
if(Input.GetAxisRaw("Vertical") < 0){
	//上に傾いている
}else if(0 < Input.GetAxisRaw("Vertical")){
	//下に傾いている
}else{
	//上下方向には傾いていない
}
if(Input.GetAxisRaw("Horizontal") < 0){
	//左に傾いている
}else if(0 < Input.GetAxisRaw("Horizontal")){
	//右に傾いている
}else{
	//左右方向には傾いていない
}

//右スティック(追加)
if(Input.GetAxisRaw("Vertical2") < 0){
	//上に傾いている
}else if(0 < Input.GetAxisRaw("Vertical2")){
	//下に傾いている
}else{
	//上下方向には傾いていない
}
if(Input.GetAxisRaw("Horizontal2") < 0){
	//左に傾いている
}else if(0 < Input.GetAxisRaw("Horizontal2")){
	//右に傾いている
}else{
	//左右方向には傾いていない
}

○値が上下左右あべこべになる場合

InputManagerの設定時に,Invertにチェックを入れている為です
開発時には全て外した状態で行い。ゲームコンフィグで変更可能にするのが良いでしょう

○機器対応問題

全般的に左スティックは同一の仕様でした
問題は右スティックで,機器によって異なります

どのぐらい違うのか,うちにあるパッドで試してみたところ,以下のようになりました

・ELECOM JC-PS101USV+PS2アナログコントローラ(DUALSHOCK 2)純正品
左右:3rd
上下:4th

・ホリパッド3 PRO. ブラック HP3-105
左右:3rd
上下:4th

・ELECOM JC-U2912FBKゲームパッド
左右:3rd
上下:5th

・Logicool Rumble Gamepad F510
左右:4th
上下:5th

※参考までに Xbox360コントローラは,左右:4th,上下:5thらしいです

こればっかりは,ソフト側から確認のしようがないので,右スティックはプレイヤに設定してもらうしか無いと思います


TOPプログラマ専用Unityでゲーム開発