godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.16k stars 21.2k forks source link

Nintendo Switch Pro Controller not working on macOS #44840

Open oseph opened 3 years ago

oseph commented 3 years ago

Bugsquad note: This issue has been confirmed several times already. No need to confirm it further.


Godot version: 3.2.3 OS: macOS 11.1, Big Sur, Device: Nintendo Switch Pro Controller

Issue description: Nintendo Switch Pro Controller is not properly recognized in Godot (both wired and wireless). The controller is recognized by macOS and when tested on www.gamepad-tester.com in Safari it successfully returns input.

I tried testing the controller in the Godot JoyPads demo and still no input is properly recognized, just like in my project. All I see are very small (static) values for the left joystick, like (0.00112..., 0.0014...), and these do not change/respond to input.

FWIW, I tried testing out all of the above with a PS4 Dual Shock and everything worked fine.

p.s. I love Godot!

Calinou commented 3 years ago

Duplicate of https://github.com/godotengine/godot/issues/43653.

samdze commented 2 years ago

Doesn't seem to be a duplicate, the OP claims that using a PS4 Dualshock everything works. It is using a Switch Pro Controller that Godot doesn't recognize the controller. There's no reference to the Switch Pro Controller in the other issue.

This is still relevant in macOS Monterey (12.1), MacBook Pro 14" M1 Max, Godot 3.4 stable.

enthooz commented 2 years ago

I am also experiencing this issue on:

My Nintendo Switch Pro Controller is recognized in:

enthooz commented 2 years ago

I am also unable to receive any input from my Nintendo Switch Pro Controller in the latest dev build (4.0-dev.20211210) with same machine config as my previous post.

I am using the following simple script:

extends Node2D

@onready var label = $Label
var joy_num = 0
var joy_name
var previous_output = ""

func _ready():
    joy_name = Input.get_joy_name(joy_num)
    label.set_text("joy_name: %s" % joy_name)
    set_physics_process(true)

func _process(_delta):
    var output = "joy_name: %s\n" % joy_name
    for axis in range(JOY_AXIS_SDL_MAX):
        output += "axis: %s, value: %f\n" % [ axis, Input.get_joy_axis(joy_num, axis) ]
    var vector = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
    output += "vector: (%f, %f)" % [vector[0], vector[1]]
    label.set_text(output)
    if output != previous_output:
        previous_output = output
        print(output)

And only see the following output in console (no matter how much I move the joysticks):

joy_name: Nintendo Switch Pro Controller
axis: 0, value: -0.022934
axis: 1, value: 0.028794
axis: 2, value: -0.048325
axis: 3, value: 0.068345
axis: 4, value: 0.000000
axis: 5, value: 0.000000
vector: (0.000000, 0.000000)
joy_name: Nintendo Switch Pro Controller
axis: 0, value: 0.000000
axis: 1, value: 0.000000
axis: 2, value: 0.000000
axis: 3, value: 0.000000
axis: 4, value: 0.000000
axis: 5, value: 0.000000
vector: (0.000000, 0.000000)
djrain commented 2 years ago

Same issue on M1 Mac Mini, Big Sur, Godot 3.4.2. Input.get_connected_joypads().size() returns 1 but the input does not work.

stephannv commented 2 years ago

Same issue on Intel Mac OS Monterey (12.1), Godot 3.5.beta1.

jipiboily commented 2 years ago

Same issue here with a 2021 M1 Max 14-inch MBP, macOS 12.0.1, and Godot 3.4.2 (45eaa2daf).

Not sure if it's related, but thought I would add it with more context: my 8bitdo SN30 Pro+ doesn't work either. Xbox and PS5 controllers are working great.

Edit, Oct 13th, 2023: still broken on Godot 4.0.2, on the same MBP, but with macOS 14.0 this time.

djrain commented 2 years ago

Just noticed that the pro controller is now functional for me via bluetooth in 3.4.3 stable on macOS Monterey (though vibration still does not work).

EDIT: it only works sometimes.

hiulit commented 2 years ago

Same here.

Tested on https://gamepad-tester.com and it works but not on Godot 3.4.4-stable.

I'm using macOS Big Sur (11.6.2)

Edit: I also tested the joypad demo from Godot and it doesn't work either Edit 2: Ok, If I have the Steam app open, it works.

samdze commented 2 years ago

The issue may be related to macOS 12 (and down) not properly supporting the Pro Controller natively. I heard macOS 13 Ventura should fix that, but I don't have the developer beta to test it.

mageowl commented 2 years ago

Godot 4 alpha 13 seems to work. I have Monterey, and am not running Steam.

edit: NVM, no longer working

mageowl commented 2 years ago

If you have steam open, it works better, but only detects one controller

Calinou commented 2 years ago

If you have steam open, it works better, but only detects one controller

Steam Input is likely doing its magic here. I didn't know it worked even if a game is not launched via Steam though.

mageowl commented 2 years ago

Even when identified by the Steam Beta joy-cons are unable to work. No clue why

mageowl commented 2 years ago

All of this is very spotty. Sometimes it works, sometimes it does not. Makes no sense and I can't find any pattern. Also when they do work, the joy-con axises are binary, and can only have in 3 states (-1, 0, 1).

mageowl commented 2 years ago

BetterJoy is not for mac, from what I can see.

mageowl commented 1 year ago

This issue persists on MacOS 13 (Ventura) although other mac apps (example) and Chrome's joypad API can detect it fine.

mageowl commented 1 year ago

When using Input.get_joy_axis(0, JOY_AXIS_LEFT_X) it returns 0.06495761871338

samuelfine commented 1 year ago

I have been, and still am, experiencing this issue as well. https://gamepad-tester.com/ detects the controller correctly, but Godot does not.

Godot 4.0.2stable macOS Ventura 13.3.1

mageowl commented 1 year ago

This is a problem with MacOS's controller support. It also sometimes occurs for Steam and other applications.

On Wed, Jun 21, 2023 at 5:53 AM Samuel Fine @.***> wrote:

I have been, and still am, experiencing this issue as well. https://gamepad-tester.com/ detects the controller correctly, but Godot does not.

Godot 4.0.2stable macOS Ventura 13.3.1

— Reply to this email directly, view it on GitHub https://github.com/godotengine/godot/issues/44840#issuecomment-1600781208, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHYQTSLNHYGOAGURSF3VAPLXMLVFHANCNFSM4VPSICQA . You are receiving this because you commented.Message ID: @.***>

einord commented 7 months ago

Still nothing new on this? I'm have the exact same issues as everyone else here.

pjsheeha commented 5 months ago

Also getting problems, and I'm on Godot 4.2.1 stable :(

resistdesign commented 1 month ago

Same issue:

Godot 4.2.1 Switch Pro Controller Bluetooth MacOS Sonoma 14.6.1

UPDATE!!!

This now WORKS IN GODOT 4.3!!!

I had to do some remapping, but well worth it!!! 😁