Rev.18 UnityでMicrosoft(XBox360)コントローラーを使う
UnityでMicrosoft(XBox360)コントローラーを使ってみたのでメモ。
※Am○zo○見ると山の様に種類あるけど基本どの
Microsoft(XBox360)コントローラーでも同じ設定なのでは無いかと(根拠ナシ)
いちお使ったのは ↓
https://www.amazon.co.jp/gp/product/B085TFWX9F/ref=ppx_yo_dt_b_asin_title_o01_s02?ie=UTF8&psc=1
■ 環境
・Windows10
・Unity 2019.4.22f1
・Visual Studio 2017
■ 内容
自分の使っているコントローラーは以下のアサインだった。
Windowsの場合はPCに繋げばすぐ使える
-----------------------------------------------------------------------------------------
X axis = Left analog X
Y axis = Left analog Y
3rd axis = LT/RT
4th axis = Right analog X
5th axis = Right analog Y
joystick button 0 = A
joystick button 1 = B
joystick button 2 = X
joystick button 3 = Y
joystick button 4 = L Trigger
joystick button 5 = R Trigger
joystick button 6 = Back
joystick button 7 = Home
joystick button 8 = Left analog press(L3)
joystick button 9 = Right analog press(R3)
6th axis = DPad X
7th axis = DPad Y
-----------------------------------------------------------------------------------------
■ 確認スクリプト
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
public class InputScript : MonoBehaviour
{
private float inputAxisLX = 0.0f;
private float inputAxisLY = 0.0f;
private float inputAxisRX = 0.0f;
private float inputAxisRY = 0.0f;
private float inputAxisDPadX = 0.0f;
private float inputAxisDPadY = 0.0f;
private float inputTriggerAxis = 0.0f;
private float inputMouseX = 0.0f;
private float inputMouseY = 0.0f;
private bool inputTriggerL = false;
private bool inputTriggerR = false;
private bool inputPadL3 = false;
private bool inputPadR3 = false;
private bool inputButtonA = false;
private bool inputButtonB = false;
private bool inputButtonX = false;
private bool inputButtonY = false;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
inputAxisLX = Input.GetAxis("XBoxPad_LX");
inputAxisLY = Input.GetAxis("XBoxPad_LY");
inputAxisRX = Input.GetAxis("XBoxPad_RX");
inputAxisRY = Input.GetAxis("XBoxPad_RY");
inputAxisDPadX = Input.GetAxis("XBoxDPad_X");
inputAxisDPadY = Input.GetAxis("XBoxDPad_Y");
// Update 自分の使ったコントローラーの仕様かXBox全体の共通仕様なのか分からないが
// LT、RT各値を取得する際はDSで言うL2、R2と別れていない為、
// 一つの設定名で取得し、R = 0.0~1.0 / L = 0.0~-1.0 で取得できる
inputTriggerAxis = Input.GetAxis("XBoxPad_LTRT");
inputTriggerL = Input.GetButton("XBoxPad_L");
inputTriggerR = Input.GetButton("XBoxPad_R");
inputPadL3 = Input.GetButton("XBoxPad_L3"); // L3
inputPadR3 = Input.GetButton("XBoxPad_R3"); // R3
// Input.GetKey("joystick button 0");でも取得可(※InputManager設定不要)
inputButtonA = Input.GetButtonDown("XBoxPad_A");
// Input.GetKey("joystick button 1");でも取得可(※InputManager設定不要)
inputButtonB = Input.GetButtonDown("XBoxPad_B");
// Input.GetKey("joystick button 2");でも取得可(※InputManager設定不要)
inputButtonX = Input.GetButtonDown("XBoxPad_X");
// Input.GetKey("joystick button 3");でも取得可(※InputManager設定不要)
inputButtonY = Input.GetButtonDown("XBoxPad_Y");
}
void OnGUI()
{
GUI.Box( 省略, "Pad Input Interaction.");
GUI.Label(省略, "Pad Input AxisLX = " + inputAxisLX.ToString("f2"));
GUI.Label(省略, "Pad Input AxisLY = " + inputAxisLY.ToString("f2"));
GUI.Label(省略, "Pad Input AxisRX = " + inputAxisRX.ToString("f2"));
GUI.Label(省略, "Pad Input AxisRY = " + inputAxisRY.ToString("f2"));
GUI.Label(省略, "Pad Input DPad AxisX = " + inputAxisDPadX.ToString("f2"));
GUI.Label(省略, "Pad Input DPad AxisY = " + inputAxisDPadY.ToString("f2"));
GUI.Label(省略, "Pad Input Trigger LT/RT = " + inputTriggerAxis.ToString("f2"));
GUI.Label(省略, "Pad Input Trigger L = " + inputTriggerL);
GUI.Label(省略, "Pad Input Trigger R = " + inputTriggerR);
GUI.Label(省略, "Pad Input Trigger PadL3 = " + inputPadL3);
GUI.Label(省略, "Pad Input Trigger PadR3 = " + inputPadR3);
GUI.Label(省略, "Pad Input A Button = " + inputButtonA);
GUI.Label(省略, "Pad Input B Button = " + inputButtonB);
GUI.Label(省略, "Pad Input X Button = " + inputButtonX);
GUI.Label(省略, "Pad Input Y Button = " + inputButtonY);
}
これで各スティック、ボタンの操作確認もゲーム画面上で出来る。
【重要】
ソースコードにも書いてあるがLT、RTを取得する際にそれぞれアサイン名は無いので
1つのアサイン名で取得する
■ その他