Skip to content

Commit 93ff6f8

Browse files
committed
docs: READMEを更新
1 parent 10c8487 commit 93ff6f8

1 file changed

Lines changed: 53 additions & 65 deletions

File tree

README.md

Lines changed: 53 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,21 @@
11
# UnityJoyCon
22

3-
UnityJoyCon は Nintendo Switch の Joy-Con を Unity から扱うためのライブラリです。ボタン入力、スティック座標、加速度・ジャイロセンサーの生データを取得でき、ゲームロジックやデバッグ表示に組み込めます
3+
UnityJoyCon は Nintendo Switch の Joy-Con を Unity Input System に直接統合するライブラリです。Joy-Con を HID デバイスとして自動認識し、ボタン入力・スティック座標・加速度 / ジャイロの生データをそのまま InputDevice から取得できます。外部の hidapi や `System.Threading.Channels` への依存はありません
44

5-
## 導入方法
6-
7-
### UnityNuGet レジストリを設定する
8-
本パッケージは `System.Threading.Channels` を UnityNuGet (`org.nuget.system.threading.channels`) から取得します。レジストリが設定されていないと依存関係が解決できないため、導入先プロジェクトで以下のいずれかの方法で UnityNuGet を追加してください。
5+
## 特徴
6+
- Unity Input System へのレイアウトを自動登録し、左右 Joy-Con を `SwitchJoyConLeftHID` / `SwitchJoyConRightHID` として認識
7+
- ボタン / スティック / 加速度 / ジャイロを標準の InputControl として取得可能
8+
- ネイティブプラグイン不要。OS にペアリングされている Joy-Con をそのまま利用
99

10-
- **manifest.json を直接編集する**
11-
```json
12-
"scopedRegistries": [
13-
{
14-
"name": "Unity NuGet",
15-
"url": "https://unitynuget-registry.openupm.com",
16-
"scopes": [
17-
"org.nuget"
18-
]
19-
}
20-
]
21-
```
22-
既存の `scopedRegistries` 配列がある場合は、`Unity NuGet` のエントリをマージし `org.nuget` スコープが含まれるように調整します。
10+
## 前提条件
11+
- Unity 2022.3.62f3 以降(推奨)
12+
- `com.unity.inputsystem` 1.14.2(本パッケージの依存として自動導入されます)
13+
- Joy-Con を事前に OS と Bluetooth ペアリングしておくこと
2314

24-
- **GUI から追加する**
25-
1. `Edit > Project Settings...` を開きます。
26-
2. `Package Manager` セクションの `Scoped Registries``+` を押し、下記を入力します。
27-
- Name: `Unity NuGet`
28-
- URL: `https://unitynuget-registry.openupm.com`
29-
- Scope(s): `org.nuget`
30-
3. 保存すると manifest.json に反映されます。
15+
## 導入方法
3116

3217
### パッケージを Git から追加する
33-
レジストリ設定後、`com.tuatmcc.unityjoycon`Git パッケージとして導入します
18+
Package Manager で Git パッケージとして追加します
3419

3520
- **manifest.json を直接編集する**
3621
```json
@@ -42,7 +27,10 @@ UnityJoyCon は Nintendo Switch の Joy-Con を Unity から扱うためのラ
4227
2. 左上の `+` ボタンから `Add package from git URL...` を選択します。
4328
3. `https://github.com/tuatmcc/UnityJoyCon.git?path=Packages/com.tuatmcc.unityjoycon` を入力して `Add` します。
4429

45-
Unity の Package Manager を再読み込みすると `UnityJoyCon` がインストールされ、`UnityJoycon` 名前空間の API を参照できるようになります。
30+
### Input System を有効化する
31+
パッケージ導入時に「新しい Input System を有効にしますか?」と促される場合があります。`Project Settings > Player > Active Input Handling``Input System Package (New)` または `Both` に設定し、Unity を再起動してください。
32+
33+
Unity の Package Manager を再読み込みすると `UnityJoyCon` がインストールされ、`UnityJoyCon` 名前空間の API を参照できるようになります。
4634

4735
### サンプルを試す場合
4836
リポジトリ全体を取得すると、サンプルシーンで動作確認が行えます。
@@ -55,57 +43,61 @@ cd UnityJoyCon
5543
`Assets/SampleJoyCon.unity` を開き、Joy-Con をペアリングした状態で Play モードに入ると、ボタン・スティック・IMU の値をリアルタイムで確認できます。
5644

5745
## クイックスタート
58-
最初に見つかった Joy-Con に接続し、ボタン / スティック / IMU を取得するサンプルです
46+
最初に見つかった Joy-Con から入力を読み取るシンプルなサンプルです。Input System によって Joy-Con が認識されると、`SwitchJoyConLeftHID.all` / `SwitchJoyConRightHID.all` に追加されます。実運用では InputAction(Input Actions アセットまたは `InputAction` クラス)にバインドして扱うのが基本です
5947

6048
```csharp
6149
using System.Linq;
6250
using UnityEngine;
63-
using UnityJoycon;
64-
using UnityJoycon.Hidapi;
51+
using UnityEngine.InputSystem;
52+
using UnityJoyCon;
6553

66-
public class JoyConBootstrap : MonoBehaviour
54+
public class JoyConReader : MonoBehaviour
6755
{
68-
private Hidapi? _hidapi;
69-
private JoyCon? _joycon;
56+
private SwitchJoyConLeftHID _left;
57+
private SwitchJoyConRightHID _right;
7058

71-
private async void Awake()
59+
private void Update()
7260
{
73-
_hidapi = new Hidapi();
74-
var info = _hidapi.GetDevices(0x057e) // Nintendo Vendor ID
75-
.FirstOrDefault(d => d.ProductId is 0x2006 or 0x2007);
76-
if (info == null)
61+
// シーン再生中にペアリングされた場合も追従できるよう、毎フレーム取得しています
62+
_left ??= SwitchJoyConLeftHID.all.FirstOrDefault();
63+
_right ??= SwitchJoyConRightHID.all.FirstOrDefault();
64+
65+
if (_left != null && _left.leftTrigger.wasPressedThisFrame)
66+
Debug.Log("ZL が押されました");
67+
68+
if (_right != null)
7769
{
78-
Debug.LogError("Joy-Con が見つかりません");
79-
return;
70+
var stick = _right.rightStick.ReadValue(); // -1.0f ~ 1.0f
71+
var accel = _right.accelerometer.ReadValue();
72+
var gyro = _right.gyroscope.ReadValue();
73+
// stick / accel / gyro をゲーム内ロジックへ反映
8074
}
81-
82-
var device = _hidapi.OpenDevice(info);
83-
_joycon = await JoyCon.CreateAsync(device);
8475
}
76+
}
77+
```
8578

86-
private void Update()
87-
{
88-
if (_joycon?.TryGetState(out var state) != true) return;
79+
### InputAction で使う例(抜粋)
80+
入力アクションアセットで、デバイスを `SwitchJoyConLeftHID` / `SwitchJoyConRightHID` に限定したり、左スティックやボタンをバインドできます。スクリプトで生成する場合の最小例:
8981

90-
if (state.IsButtonPressed(Button.A))
91-
{
92-
Debug.Log("A ボタンが押されています");
93-
}
82+
```csharp
83+
using UnityEngine;
84+
using UnityEngine.InputSystem;
85+
using UnityJoyCon;
9486

95-
var stick = state.Stick; // -1.0f ~ 1.0f に正規化済み
96-
var imu = state.ImuSamples[^1]; // 最新サンプル
97-
// stick / imu をゲーム内ロジックに反映
98-
}
87+
public class JoyConActions : MonoBehaviour
88+
{
89+
private InputAction _stick;
9990

100-
private async void OnDestroy()
91+
private void OnEnable()
10192
{
102-
if (_joycon != null)
103-
{
104-
await _joycon.DisposeAsync();
105-
_joycon = null;
106-
}
93+
_stick = new InputAction(type: InputActionType.Value, binding: "<SwitchJoyConRightHID>/rightStick");
94+
_stick.Enable();
95+
_stick.performed += ctx => Debug.Log($"Right stick: {ctx.ReadValue<Vector2>()}");
96+
}
10797

108-
_hidapi?.Dispose();
98+
private void OnDisable()
99+
{
100+
_stick.Dispose();
109101
}
110102
}
111103
```
@@ -114,9 +106,5 @@ public class JoyConBootstrap : MonoBehaviour
114106
- `Assets/JoyConRight.cs` は Joy-Con のステートを UI に反映する参考スクリプトです。
115107
- `Assets/SampleJoyCon.unity` を Play すると、ボタンが点灯し IMU が TextMeshPro で表示されます。
116108

117-
## hidapi バイナリの更新
118-
ネイティブライブラリを更新する場合は、GitHub Actions の `Build hidapi binaries` ワークフローを Workflow Dispatch で起動してください。macOS / Windows / Linux 向けの hidapi をビルドし、`Packages/com.tuatmcc.unityjoycon/Runtime/Hidapi/Plugins/` 下へ自動コミットします。
119-
120109
## ライセンス
121110
- パッケージ本体: MIT License
122-
- hidapi: 各プラットフォーム向けバイナリは hidapi のライセンスに従います

0 commit comments

Comments
 (0)