アオイの備忘録ブログ

色んな事を書く備忘録用ブログです(※更新頻度は神のみぞ知る)

Rev.18 UnityでMicrosoft(XBox360)コントローラーを使う

UnityでMicrosoftXBox360)コントローラーを使ってみたのでメモ。
※Am○zo○見ると山の様に種類あるけど基本どの
MicrosoftXBox360)コントローラーでも同じ設定なのでは無いかと(根拠ナシ)
いちお使ったのは ↓ 
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;
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つのアサイン名で取得する

■ その他

はてなブログでのソースコードの書き方が分からない、、、、