Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mac OSにおいて、Joy-Conの入力が反映されない #1260

Open
Appbird opened this issue Aug 24, 2024 · 2 comments
Open

Mac OSにおいて、Joy-Conの入力が反映されない #1260

Appbird opened this issue Aug 24, 2024 · 2 comments

Comments

@Appbird
Copy link

Appbird commented Aug 24, 2024

予期しない動作の内容 | Describe the unexpected behavior
Mac OSにおいて、Joy-Con (L/R)の入力を与えてもJoyConクラスのボタン・スティック入力値に反映されない。

  • ボタン入力が反映されず、どれだけボタンを押し込んでも無入力として扱われる。
    • これはJoy-Conに備え付けられている全てのボタンにおいて発生する。
  • スティック入力も一切反応しない。(メソッドpovD8()からは常にnone値が返ってきている。)
  • Joy-Con自体は認識しているようで、JoyConインスタンスのbool値評価ではtrueが返ってきている。
  • 両方のJoy-Con L/Rを接続、アプリケーションを起動した状態で、片方のJoy-Conの接続を切断した場合、接続され続けている他方のJoy-Conの入力が全て正しく反映されるようになる。
  • その状態からさらに接続を外したJoy-Conを再度接続した場合、また入力が反映されなくなる。

再現方法 | To Reproduce

*2のコード

# include <Siv3D.hpp>

void Main()
{
    Scene::SetBackground(ColorF{ 0.9 });
    Window::Resize(1280, 720);
    Effect effect;

    Vec2 left{ 640 - 100, 100 }, right{ 640 + 100, 100 };
    double angle = 0_deg;
    double scale = 400.0;
    bool covered = true;

    while (System::Update())
    {
        Circle{ Vec2{ 640 - 300, 450 }, scale / 2 }.drawFrame(scale * 0.1);
        Circle{ Vec2{ 640 + 300, 450 }, scale / 2 }.drawFrame(scale * 0.1);

        // Joy-Con (L) を取得
        if (const auto joy = JoyConL(0))
        {
            joy.drawAt(Vec2{ 640 - 300, 450 }, scale, -90_deg - angle, covered);

            if (auto d = joy.povD8())
            {
                left += Circular{ 4, *d * 45_deg };
            }

            if (joy.button2.down())
            {
                effect.add([center = left](double t) {
                    Circle{ center, 20 + t * 200 }.drawFrame(10, 0, AlphaF(1.0 - t));
                    return t < 1.0;
                    });
            }
        }

        // Joy-Con (R) を取得
        if (const auto joy = JoyConR(0))
        {
            joy.drawAt(Vec2{ 640 + 300, 450 }, scale, 90_deg + angle, covered);

            if (auto d = joy.povD8())
            {
                right += Circular{ 4, *d * 45_deg };
            }

            if (joy.button2.down())
            {
                effect.add([center = right](double t) {
                    Circle{ center, 20 + t * 200 }.drawFrame(10, 0, AlphaF(1.0 - t));
                    return t < 1.0;
                    });
            }
        }

        Circle{ left, 30 }.draw(ColorF{ 0.0, 0.75, 0.9 });
        Circle{ right, 30 }.draw(ColorF{ 1.0, 0.4, 0.3 });
        effect.update();

        SimpleGUI::Slider(U"Rotation: ", angle, -180_deg, 180_deg, Vec2{ 20, 20 }, 120, 200);
        SimpleGUI::Slider(U"Scale: ", scale, 100.0, 600.0, Vec2{ 20, 60 }, 120, 200);
        SimpleGUI::CheckBox(covered, U"Covered", Vec2{ 20, 100 });
    }
}

発生環境(デスクトップの場合) | Desktop (please complete the following information):

  • MacBook Pro 16-inch, 2023
  • OS: Sonoma 14.6.1
  • バージョン | Version: 0.6.15
  • CPU/GPU: Apple M2 Pro
    • Rosettaモードでアプリケーションが動作している。

備考 | Additional context

  • Joy-Conを両方接続した時、Mac上ではJoy-Con L/Rが一つのゲームコントローラーとして認識されているようで、これが原因に関連しているかもしれない。
    • スクリーンショット 2024-08-24 23 30 32
    • (画像中ではバッテリー0%と記載されているが、実際には十分に充電されている)
  • Gamepadの挙動を確かめられるコード*3では、次のような出力を見せた。
  • XInput 対応コントローラとして入力した際は一切動作しなかった。
  • 片方のJoy-Conを接続し直す時に一方のJoy-Conに何らかのスティック入力を与え続けていると、そのスティック入力が継続され続けながら入力を受け付けなくなる。
  • 片方のJoy-Conを接続してから起動した場合には、うまく反応する場合としない場合がある。
  • 再現方法はよく分からないが、二つのジョイコンが同時に動いていたことはあった。
    • ただしMacを再起動すると動かなくなってしまった。
@Reputeless
Copy link
Member

ご報告ありがとうございました。同様の問題を手元の macOS 環境で確認しました。
ユーザ側のコードでは対処ができないので、エンジン側での対処に向け調査します。

@Appbird
Copy link
Author

Appbird commented Sep 19, 2024

承知しました。対応していただき本当にありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants