1
0

添加DS和Xbox手柄支持

This commit is contained in:
ALIENJACK\alien 2025-03-31 16:20:39 +08:00
parent 3797bba442
commit fbe47bce1b
5 changed files with 111 additions and 1 deletions
AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager

View File

@ -0,0 +1,28 @@
namespace AxibugEmuOnline.Client.InputDevices
{
/// <summary> PS3,PS4控制器 </summary>
public class DualShockController_D : InputDevice_D
{
public Button_C Circle;
public Button_C Triangle;
public Button_C Cross;
public Button_C Square;
public Button_C Up;
public Button_C Down;
public Button_C Left;
public Button_C Right;
public Button_C L1;
public Button_C L2;
public Button_C L3;
public Button_C R1;
public Button_C R2;
public Button_C R3;
public Button_C Share;
public Button_C Options;
public Button_C TouchpadBtn;
public Stick_C LeftStick;
public Stick_C RightStick;
public DualShockController_D(InputResolver resolver) : base(resolver) { }
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e1f707631f22b4843840696ce2f66471

View File

@ -0,0 +1,27 @@
namespace AxibugEmuOnline.Client.InputDevices
{
public class XboxController_D : InputDevice_D
{
public Button_C X;
public Button_C Y;
public Button_C A;
public Button_C B;
public Button_C Up;
public Button_C Down;
public Button_C Left;
public Button_C Right;
public Button_C View;
public Button_C Menu;
public Button_C LeftBumper;
public Button_C LeftTrigger;
public Button_C LeftStickPress;
public Button_C RightBumper;
public Button_C RightTrigger;
public Button_C RightStickPress;
public Stick_C LeftStick;
public Stick_C RightStick;
public XboxController_D(InputResolver resolver) : base(resolver) { }
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5f0e5bba332725e45bb53ac32c4ee6d2

View File

@ -5,6 +5,9 @@ using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.DualShock;
using UnityEngine.InputSystem.Haptics;
using UnityEngine.InputSystem.XInput;
namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
{
@ -24,7 +27,9 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
{
InputDevice_D newDevice = null;
if (ipdev is Keyboard) newDevice = new Keyboard_D(this);
else if (ipdev is Gamepad) newDevice = new GamePad_D(this);
else if (ipdev is DualShockGamepad) newDevice = new DualShockController_D(this);
else if (ipdev is XInputController) newDevice = new XboxController_D(this);
else if (ipdev is Gamepad) newDevice = new GamePad_D(this); //注意Gamepad的优先级,因为任何手柄,Inputsystem中的基类都是GamePad
if (newDevice != null)
{
@ -221,6 +226,52 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
mapper[keyboard_d.Semicolon] = ipKeyboard.semicolonKey;
mapper[keyboard_d.Quote] = ipKeyboard.quoteKey;
}
else if (device_d is DualShockController_D ds_d)
{
var ipDsGamePad = ipdevice as DualShockGamepad;
mapper[ds_d.Circle] = ipDsGamePad.circleButton;
mapper[ds_d.Triangle] = ipDsGamePad.triangleButton;
mapper[ds_d.Cross] = ipDsGamePad.crossButton;
mapper[ds_d.Square] = ipDsGamePad.squareButton;
mapper[ds_d.Up] = ipDsGamePad.dpad.up;
mapper[ds_d.Down] = ipDsGamePad.dpad.down;
mapper[ds_d.Left] = ipDsGamePad.dpad.left;
mapper[ds_d.Right] = ipDsGamePad.dpad.right;
mapper[ds_d.L1] = ipDsGamePad.L1;
mapper[ds_d.L2] = ipDsGamePad.L2;
mapper[ds_d.L3] = ipDsGamePad.L3;
mapper[ds_d.R1] = ipDsGamePad.R1;
mapper[ds_d.R2] = ipDsGamePad.R2;
mapper[ds_d.R3] = ipDsGamePad.R3;
mapper[ds_d.Share] = ipDsGamePad.shareButton;
mapper[ds_d.Options] = ipDsGamePad.optionsButton;
mapper[ds_d.TouchpadBtn] = ipDsGamePad.touchpadButton;
mapper[ds_d.LeftStick] = ipDsGamePad.leftStick;
mapper[ds_d.RightStick] = ipDsGamePad.rightStick;
}
else if(device_d is XboxController_D xbox_d)
{
var ipXInputGamePad = ipdevice as XInputController;
mapper[xbox_d.X] = ipXInputGamePad.xButton;
mapper[xbox_d.Y] = ipXInputGamePad.yButton;
mapper[xbox_d.A] = ipXInputGamePad.aButton;
mapper[xbox_d.B] = ipXInputGamePad.bButton;
mapper[xbox_d.Up] = ipXInputGamePad.dpad.up;
mapper[xbox_d.Down] = ipXInputGamePad.dpad.down;
mapper[xbox_d.Left] = ipXInputGamePad.dpad.left;
mapper[xbox_d.Right] = ipXInputGamePad.dpad.right;
mapper[xbox_d.View] = ipXInputGamePad.view;
mapper[xbox_d.Menu] = ipXInputGamePad.menu;
mapper[xbox_d.LeftBumper] = ipXInputGamePad.leftShoulder;
mapper[xbox_d.LeftTrigger] = ipXInputGamePad.leftTrigger;
mapper[xbox_d.LeftStickPress] = ipXInputGamePad.leftStickButton;
mapper[xbox_d.RightBumper] = ipXInputGamePad.rightShoulder;
mapper[xbox_d.RightTrigger] = ipXInputGamePad.rightTrigger;
mapper[xbox_d.RightStickPress] = ipXInputGamePad.rightStickButton;
mapper[xbox_d.LeftStick] = ipXInputGamePad.leftStick;
mapper[xbox_d.RightStick] = ipXInputGamePad.rightStick;
}
else if (device_d is GamePad_D gamepad_d)
{
var ipGamepad = ipdevice as Gamepad;